我有一个下拉列表,旁边有一个文本字段。基于下拉列表中选择的值,我正在更改文本字段的类型,例如将其更改为日期,整数,文本。这些文本字段的必需属性设置为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'}"/>
答案 0 :(得分:1)
你需要做两件事:
将immediate="true"
添加到下拉列表中。
<h:selectOneMenu immediate="true">
这将导致在应用请求值阶段而不是验证阶段调用valueChangeListener
方法。因此,它将比平时更早地调用一个阶段,并且此时尚未处理没有immediate="true"
的所有其他输入字段。
在与下拉列表相关联的valueChangeListener
方法中,请致电FacesContext#renderResponse()
。
FacesContext.getCurrentInstance().renderResponse();
这将指示JSF绕过所有剩余阶段,直到渲染响应阶段。因此,不再处理没有immediate="true"
的其他输入字段。