我有这种情况。我使用托管bean作为转换器来预先填充数据库中的SelectManyCheckBox,它运行良好。这是我的Converter类
@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() {
}
}
预选复选框后,我选中或取消选中复选框或不执行任何操作,然后单击表单中的“提交”按钮。 然后按钮的第一次单击再次执行convertor的getAsString方法并重新加载页面。 在第二次单击时,它会按预期执行getAsObject方法,然后执行操作。
这是我的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>
为什么它再次执行getAsString方法以及如何解决它以在第一次点击时触发动作方法?