Mic*_*ael 6 validation jsf components
我使用自定义验证器.困难在于我只需要检查两个字段inputText并进行比较.第一个字段必须大于第二个字段.如果没有,那么我必须显示带有错误信息的消息.所以我需要传递我的自定义验证器第一个inputText字段的值.为此,我需要读取验证器类中第一个InputText字段的值.如何在验证器类中获取必要组件的id?使用标签的解决方案不适合我.我需要直接转到所需的组件也许这可以通过FacesContext的任何方法完成?
Bal*_*usC 11
只需通过整个组件<f:attribute>
.
<h:form id="formId">
<h:inputText value="#{bean.start}">
<f:validator validatorId="rangeValidator" />
<f:attribute name="endComponent" value="#{endComponent}" />
</h:inputText>
...
<h:inputText binding="#{endComponent}" value="#{bean.end}" />
...
</h:form>
Run Code Online (Sandbox Code Playgroud)
(注意:binding
代码是原样,不要让它引用bean属性!)
在验证器中
UIInput endComponent = (UIInput) component.getAttributes().get("endComponent");
Object endComponentValue = endComponent.getSubmittedValue();
// ...
Run Code Online (Sandbox Code Playgroud)
重要提示是组件按树中显示的顺序进行处理,转换和验证.任何未经转换/验证的组件的提交值都可以使用,UIInput#getSubmittedValue()
并且任何已经转换/验证的组件都可以使用UIInput#getValue()
.因此,在您的特定示例中,您应该通过UIInput#getSubmittedValue()
而不是获取值UIInput#getValue()
.
如果您希望使用已经转换和验证的值UIInput#getValue()
,那么您需要将验证器移动到第二个组件,然后再传递第一个组件.
<h:form id="formId">
<h:inputText binding="#{startComponent}" value="#{bean.start}" />
...
<h:inputText value="#{bean.end}" />
<f:validator validatorId="rangeValidator" />
<f:attribute name="startComponent" value="#{startComponent}" />
</h:inputText>
...
</h:form>
Run Code Online (Sandbox Code Playgroud)
UIInput startComponent = (UIInput) component.getAttributes().get("startComponent");
Object startComponentValue = startComponent.getValue();
// ...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14792 次 |
最近记录: |