12

我在编辑页面和验证器中有一个简单的 JSF 输入表单,它检查重复值:

<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){
....
}

我很感兴趣是否有任何可能的方法来发送将用于验证过程的第二个值?

4

2 回答 2

25

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

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

和:

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

可以从EL获取值。祝你好运

于 2013-02-04T21:19:22.563 回答
2

您可以添加一个 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 方法跳过模型更新。

于 2013-02-04T22:26:59.730 回答