0

我这里有情况。我使用托管 bean 作为转换器从数据库中预填充 SelectManyCheckBox 并且效果很好。这是我的转换器类

@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() {
    }
}

在它预选复选框后,我选择或取消选择复选框或什么都不做,然后单击表单中的提交按钮。然后按钮的第一次单击只是再次执行转换器的 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 方法以及如何解决它以在第一次单击时触发动作方法?

4

0 回答 0