【发布时间】:2014-07-28 03:11:19
【问题描述】:
我们有一个实体的 UI,该实体要么拥有工具,要么拥有发行者,但从不拥有两者。您可以从弹出的搜索对话框中选择一个并将其分配给实体。
用户可以在“搜索...”按钮旁边看到两者的编号和名称。这两个必须都是不可编辑的,即我们各自的<p:inputText ... readonly="true" ... /> 将输入变灰。
我们现在的要求是,当没有选择或同时选择工具和发行者时,不仅应该显示验证消息,而且标有readonly="true" 的文本框也显示为红色(以及和他们的标签)。
添加时,按“保存”前:
添加时,按“保存”后:
我尝试了一些方法,然后最终选择了 OmniFaces <o:validateMultiple>,这似乎朝着正确的方向发展。但是,我随后注意到验证器没有启动,正如您从图像中看到的那样......(我刚刚删除了readonly="true" 让您看到效果)
以下是代码摘录:
<!-- this panel is insider a form, yes -->
<h:panelGroup id="subpanel"
layout="block">
<o:validateMultiple id="instrument-or-issuer-validator"
validator="#{barrierCrossingManager.validateInstrumentOrIssuer}"
components="instrument-isin instrument-description issuer-number issuer-name"
message="..." />
<!-- some panel grid with the inputs -->
...
<p:panelGrid id="issuer-subpanel">
<p:row>
<p:column>
<p:outputLabel for="issuer-number" value="#{msg['common.number.label']}:" />
</p:column>
<p:column colspan="3">
<p:inputText id="issuer-number"
value="#{barrierCrossingManager.selectedIssuer.nbr}"
readonly="false" />
</p:column>
...
</p:row>
</p:panelGrid>
...
<h:messages id="msgs"
layout="list"
styleClass="subcontent-validation-msg-wrapper"
showDetail="false"
showSummary="true" />
</h:panelGroup>
问:
你是怎么解决这个问题的?
问题似乎是 OmniFaces 或 JSF(?) 不验证只读组件。我还查看了 <o:validateMultiple> 的 OmniFaces VDL,但没有像 allowReadOnlyComponentHighlighting 或类似的标志。
还有其他方法吗?
【问题讨论】:
标签: validation jsf readonly