Jsf转换器调用getAsString方法两次

时间:2013-01-19 18:52:13

标签: jsf-2 commandbutton

我有这种情况。我使用托管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方法以及如何解决它以在第一次点击时触发动作方法?

0 个答案:

没有答案