I have situation here. I use managed bean as converter to pre populate SelectManyCheckBox from database and it works good. Here is my Converter class
@ManagedBean
@RequestScoped
public class RoleConverter implements Converter{
@EJB
private UserRoleSingleton userRoleSingleton;
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if(value == null){
return null;
}
return userRoleSingleton.getUserRoleById(Integer.parseInt(value));
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if(!(value instanceof Userrole) || ((Userrole) value).getRoleId() == null){
return null;
}
Userrole role = (Userrole) value;
return String.valueOf(role.getRoleId());
}
public RoleConverter() {
}
}
After it preselect checkboxes I select or deselect check boxes or do nothing and click submit button in form. Then button's first click just executes convertor's getAsString method again and reload page. And on second click it executes getAsObject method as expected then action.
Here is my SelectManyCheckBox:
<p:selectManyCheckbox id="orgpermission"
value="#{adminView.selectedrolesorg}" layout="pageDirection">
<f:selectItems value="#{adminView.allRolesRelatedToOrgInfo}"
var="citrole" itemValue="#{citrole}"
itemLabel="#{citrole.roledescription}" converter="#{roleConverter}" />
</p:selectManyCheckbox>
Why does it executes getAsString method again and how to solve it to fire action method on first click?