我有一个简单的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){
....
}
我感兴趣的是有没有办法发送第二个值用于验证过程?
答案 0 :(得分:22)
<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方法以跳过模型更新。