Kaw*_*awu 5 validation jsf readonly
我们为具有工具或发行人的实体提供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>
Run Code Online (Sandbox Code Playgroud)
问:
你是如何解决这个问题的?
问题似乎是OmniFaces或JSF(?)不对只读组件进行验证.我也看了OmniFaces VDL <o:validateMultiple>,但没有像allowReadOnlyComponentHighlighting或类似的旗帜.
还有另外一种方法吗?
出于安全原因,JSF确实会跳过处理(转换,验证和模型更新)中的只读(和禁用)字段.您不希望黑客无论如何都能通过操作请求参数来编辑这些值,对吧?出于明显的安全原因,OmniFaces也将以相同的方式跳过它们.
您最好的选择是将EL表达式放在readonly属性中,该表达式在false应用请求值和验证阶段(第2阶段和第3阶段)true期间进行评估,但在所有其他阶段进行评估.足以检查当前阶段序数是否为4或更大.这应该允许JSF无论如何都要对值进行验证.然后,需要到EL表达式添加到rendered其评估属性false期间更新模型值相(第四相),从而使模型值不会被更新,因为readonly在false过程中应用请求值和验证阶段(因而该组件具有其本地值集,触发模型更新).
您可以获得FacesContext#getCurrentPhaseId()EL中当前可用的JSF阶段#{facesContext.currentPhaseId}.在PhaseId又具有getOrdinal()返回相指数(从1至6的标准相)方法.
总而言之,这应该是为了验证它们,但是阻止模型更新:
<p:inputText
readonly="#{facesContext.currentPhaseId.ordinal ge 4}"
rendered="#{facesContext.currentPhaseId.ordinal ne 4}"
/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
684 次 |
| 最近记录: |