我正在使用 jsf 2.1 + primefaces 3.4.1。我遇到了阻止验证禁用组件的问题。
我所拥有的大约是这样的:
<h:form id="form">
<p:dataTable id="parentDataTable" value=#{bean.list} var="parentItem"..>
<p:column>
..
<p:dataTable id="childDataTable" value=#{bean.map[parentItem]}" var="childItem">
<p:column>
<f:facet name="header">
some inputText
</f:facet>
<p:inputText id="inputText"
disabled=#{bean.selectedObjectsMap[childItem]} required="true" requiredMessage="value required" />
<p:message for=":form:parentDataTable:childDataTable:inputText" />
</p:column>
<p:column>
<f:facet name="header">
Select
</f:facet>
<p:selectBooleanCheckbox id="checkBox" value="#{bean.selectedObjectsMap[childItem]}">
<p:ajax update=":form:parentDataTable:childDataTable:inputText" />
</p:selectBooleanCheckbox>
</p:column>
</p:dataTable>
</p:column>
</p:dataTable>
</h:form>
这个想法是,默认情况下 inputText 组件被禁用,并且当我提交表单时“必填值”验证不起作用。当我单击 selectBooleancheckbox 组件时, inputText 被启用,并且当我提交表单时“必需值”验证也有效。但是,当我禁用 inputText 时,验证继续工作,并且出现“需要值”消息,我无法提交表单。当我单击复选框时,似乎服务器端的 JSF UI 组件树没有正确更新,尽管在视觉上我可以看到每次单击复选框时 inputText 组件都会被禁用。
有什么想法可以解决这个问题吗?