禁用/启用 primefaces 组件
disable/ enable primefaces components
我想在从 p:selectOneMenu
中选择后禁用一些 primefaces 组件,但是当我选择不选择选项时它仍然被禁用
<p:outputLabel value="Manager" style="color:white;font-weight: bold;" />
<p:selectOneMenu id="manager" value="#{employeeMB.selectedManager}" immediate="true">
<f:selectItem itemLabel="Selectionner..." noSelectionOption="true"/>
<f:selectItems value="#{employeeMB.managers}" />
<p:ajax update="managerSelect role" />
</p:selectOneMenu>
<p:outputLabel value="Est un Manager"
style="color:white;font-weight: bold;" />
<p:selectBooleanCheckbox id="managerSelect"
value="#{employeeMB.employee.isManager}"
disabled="#{employeeMB.selectedManager != null}" />
<p:outputLabel for="role" value="Role Utilisateur" style="color:white;font-weight: bold;" />
<p:selectManyCheckbox id="role" value="#{employeeMB.selectedRoles}">
<f:selectItem itemLabel="Employée" itemValue="ROLE_EMPLOYEE" />
<f:selectItem itemLabel="Manager" itemValue="ROLE_MANAGER" itemDisabled="#{employeeMB.selectedManager != null}"/>
<f:selectItem itemLabel="RH" itemValue="ROLE_RH" itemDisabled="#{employeeMB.selectedManager != null}"/>
</p:selectManyCheckbox>
当更新后的模型值不是 null
而是一个空字符串时,就会发生这种情况。您需要重新配置 JSF 以将提交的空字符串值解释为 null
,以避免模型通过 web.xml
.
中的以下条目被空字符串污染
<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
尽管如此,最好使用 #{not empty bean.property}
而不是 #{bean.property != null}
。它还包括空字符串。
与具体问题无关,那边的noSelectionOption
没用。仔细阅读Best way to add a "nothing selected" option to a selectOneMenu in JSF了解一下。我也怀疑你对 immediate
属性的理解。摆脱它。由于所有 ajax 魔法,它在 JSF 2.x 世界中不再具有合理的价值。
我想在从 p:selectOneMenu
中选择后禁用一些 primefaces 组件,但是当我选择不选择选项时它仍然被禁用
<p:outputLabel value="Manager" style="color:white;font-weight: bold;" />
<p:selectOneMenu id="manager" value="#{employeeMB.selectedManager}" immediate="true">
<f:selectItem itemLabel="Selectionner..." noSelectionOption="true"/>
<f:selectItems value="#{employeeMB.managers}" />
<p:ajax update="managerSelect role" />
</p:selectOneMenu>
<p:outputLabel value="Est un Manager"
style="color:white;font-weight: bold;" />
<p:selectBooleanCheckbox id="managerSelect"
value="#{employeeMB.employee.isManager}"
disabled="#{employeeMB.selectedManager != null}" />
<p:outputLabel for="role" value="Role Utilisateur" style="color:white;font-weight: bold;" />
<p:selectManyCheckbox id="role" value="#{employeeMB.selectedRoles}">
<f:selectItem itemLabel="Employée" itemValue="ROLE_EMPLOYEE" />
<f:selectItem itemLabel="Manager" itemValue="ROLE_MANAGER" itemDisabled="#{employeeMB.selectedManager != null}"/>
<f:selectItem itemLabel="RH" itemValue="ROLE_RH" itemDisabled="#{employeeMB.selectedManager != null}"/>
</p:selectManyCheckbox>
当更新后的模型值不是 null
而是一个空字符串时,就会发生这种情况。您需要重新配置 JSF 以将提交的空字符串值解释为 null
,以避免模型通过 web.xml
.
<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
尽管如此,最好使用 #{not empty bean.property}
而不是 #{bean.property != null}
。它还包括空字符串。
与具体问题无关,那边的noSelectionOption
没用。仔细阅读Best way to add a "nothing selected" option to a selectOneMenu in JSF了解一下。我也怀疑你对 immediate
属性的理解。摆脱它。由于所有 ajax 魔法,它在 JSF 2.x 世界中不再具有合理的价值。