我有一个下拉列表和旁边的文本字段 . 基于下拉列表中选择的值,我正在更改文本字段的类型,例如将其更改为日期,整数,文本 . 这些文本字段的必需属性设置为true .
因此,当我在下拉列表中选择不同的值时,我可以更改文本字段的类型,但我也会在文本字段中收到所需的错误消息 . 我怎么能避免这个?
我正在使用JSF 1.2 .
<h:selectOneMenu id="SelectField"
value="#{logSearchBean.searchType}"
onchange="this.form.submit();"
valueChangeListener="#{logSearchBean.searchValueType}" >
<f:selectItems value="#{logSearchBean.columnDesc}" />
</h:selectOneMenu>
<h:inputText id="SearchText"
value="#{logSearchBean.searchValue}"
required="true"
requiredMessage="Please provide value to Search for"
rendered="#{logSearchBean.searchValueEditor eq 'SearchText'}"/>
<t:inputDate id="SearchDate"
value="#{logSearchBean.searchValueDate}"
popupCalendar="true"
required="true"
requiredMessage="Please provide value to Search for"
rendered="#{logSearchBean.searchValueEditor eq 'SearchDate'}"/>
1 回答
你需要做两件事:
immediate="true"
添加到下拉列表中 .这将导致在应用请求值阶段而不是验证阶段调用
valueChangeListener
方法 . 因此,它将比平时更早地调用一个阶段,并且此时尚未处理没有immediate="true"
的所有其他输入字段 .valueChangeListener
方法中,调用FacesContext#renderResponse() .这将指示JSF绕过所有剩余阶段,直到渲染响应阶段 . 因此,不再处理没有
immediate="true"
的其他输入字段 .