首页 文章

在下拉列表中更改选择时,避免输入字段的required = true约束

提问于
浏览
1

我有一个下拉列表和旁边的文本字段 . 基于下拉列表中选择的值,我正在更改文本字段的类型,例如将其更改为日期,整数,文本 . 这些文本字段的必需属性设置为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 回答

  • 1

    你需要做两件事:

    • immediate="true" 添加到下拉列表中 .
    <h:selectOneMenu immediate="true">
    

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

    FacesContext.getCurrentInstance().renderResponse();
    

    这将指示JSF绕过所有剩余阶段,直到渲染响应阶段 . 因此,不再处理没有 immediate="true" 的其他输入字段 .

相关问题