在同一组件中使用JSF绑定+验证程序两次显示消息
我有两个组件select和inputText,其中的值是相互依赖的。例如,如果选择选项1,则inputText必须是数字 在我的bean中,我为绑定的2个组件和一个验证方法添加了属性,而在jsp中,我添加了validator和binding属性来选择并绑定到inputText 我使用绑定来获取两个组件的提交值以进行验证 这是正确的方法吗?是否有其他方法获取提交的值 这样做的结果是显示重复的消息。如果我从select中删除binding属性,那么它将按预期工作,但我无法获取所选的值,而是在会话中使用缓存值bean值 提前谢谢 阿尔梅罗 代码:在同一组件中使用JSF绑定+验证程序两次显示消息,jsf,Jsf,我有两个组件select和inputText,其中的值是相互依赖的。例如,如果选择选项1,则inputText必须是数字 在我的bean中,我为绑定的2个组件和一个验证方法添加了属性,而在jsp中,我添加了validator和binding属性来选择并绑定到inputText 我使用绑定来获取两个组件的提交值以进行验证 这是正确的方法吗?是否有其他方法获取提交的值 这样做的结果是显示重复的消息。如果我从select中删除binding属性,那么它将按预期工作,但我无法获取所选的值,而是在会话中使
通过将隐藏组件值与选择组件绑定,可以使用黑客绕过。在的onchange方法中,可以设置此隐藏组件的值,并在服务器中获取值:
<h:form id="myForm">
<h:selectOneMenu id="cmbOptions"
onchange="document.getElementById('myForm:hidSelectOption').value=this.value">
<f:selectItem itemLabel="Option 1" itemValue="1" />
<f:selectItem itemLabel="Option 2" itemValue="2" />
<f:selectItem itemLabel="Option 3" itemValue="3" />
</h:selectOneMenu>
<h:inputHidden id="hidSelectOption" value="#{bean.selectedOption}" />
<h:commandButton value="Click me" action="#{bean.someAction}" />
</h:form>
我尝试了上述解决方案,但检索到的值是模型值。我希望在模型更新之前的验证阶段获得值。您可以将验证应用于隐藏的组件值。
<h:form id="myForm">
<h:selectOneMenu id="cmbOptions"
onchange="document.getElementById('myForm:hidSelectOption').value=this.value">
<f:selectItem itemLabel="Option 1" itemValue="1" />
<f:selectItem itemLabel="Option 2" itemValue="2" />
<f:selectItem itemLabel="Option 3" itemValue="3" />
</h:selectOneMenu>
<h:inputHidden id="hidSelectOption" value="#{bean.selectedOption}" />
<h:commandButton value="Click me" action="#{bean.someAction}" />
</h:form>
@RequestScope
@ManagedBean
public class Bean {
private String selectedOption;
//getters and setters...
public Bean() {
}
public void someAction() {
//showing the actual value of the hidden component...
//remember that you should use a logger, this is a basic example
System.out.println(selectedOption);
}
}