1

我旁边有一个下拉列表和一个文本字段。根据下拉列表中选择的值,我正在更改文本字段的类型,例如将其更改为日期、整数、文本。这些文本字段的 required 属性设置为 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'}"/>
4

1 回答 1

1

你需要做两件事:

  1. 添加immediate="true"到下拉列表。

    <h:selectOneMenu immediate="true">
    

    这将导致valueChangeListener在应用请求值阶段而不是验证阶段调用该方法。因此,它将比平时早一个阶段调用immediate="true",并且此时尚未处理所有其他输入字段。

  2. valueChangeListener与下拉列表关联的方法中,调用FacesContext#renderResponse().

    FacesContext.getCurrentInstance().renderResponse();
    

    这将指示 JSF 绕过所有剩余阶段,直到呈现响应阶段。因此,其他输入字段immediate="true"将不再被处理。

于 2011-02-11T21:11:20.017 回答