如何在JSF验证器中传递第二个值?

时间:2013-02-04 20:52:34

标签: jsf jsf-2

我有一个简单的JSF输入表单到编辑页面和Validator,它检查重复的值:

<td>Name</td>
<td>
    <h:outputText value="#{ud.name}"
                  rendered="#{not DCProfileTabGeneralController.editable}" />
    <h:inputText id="dcname" value="#{ud.name}" rendered="#{DCProfileTabGeneralController.editable}"
                 validator="#{ValidatorDatacenterController.validateDatacenterName}" autocomplete="off">
        <f:ajax event="blur" render="dcnamevalidator" />
    </h:inputText>
    <h:message id="dcnamevalidator" for="dcname" />
</td>

public void validateDatacenterName(FacesContext context, UIComponent component, Object value){
....
}

我感兴趣的是有没有办法发送第二个值用于验证过程?

2 个答案:

答案 0 :(得分:22)

想到了{p> <f:attribute>。在inputtext中添加一个并在验证器中检索它。

<h:inputText id="dcname".....
<f:attribute name="param" value="myparam" /> 
</h:inputText>

String param = (String) component.getAttributes().get("param"); 

可以从EL获得价值。祝你好运

答案 1 :(得分:1)

您可以添加postValidate事件来验证多个字段,例如

<f:event listener="#{bean.validationMethod}" type="postValidate" />

这应该在模型更新之前触发,您可以使用

获取不同组件的新值
FacesContext fc = FacesContext.getCurrentInstance(); 
UIComponent components = event.getComponent();
UIInput param1 = (UIInput) components.findComponent("param1");
UIInput param2 = (UIInput) components.findComponent("param2");

如果验证失败,请调用FacesContext renderResponse方法以跳过模型更新。