设置禁用属性时,SelectOneMenu和valueChangeListener错误

时间:2013-02-14 15:56:03

标签: jsf richfaces

我正在使用<h:selectOneMenu>组件。它具有disabled属性集。因此,我无法在组件上使用valueChangeListener。我尝试使用<a4j:actionListener>标记,但是我收到一条错误,指出父标记不是ActionSource类型。当所选值发生变化时,是否还有其他触发操作的方法?

这是标签:

<table>
<tr>
<td><input type="radio" id="auto" name="name" value="auto" onclick="onclickfunction  (this);"> </input>
</td>
<td>
<h:selectOneMenu id="abc" value="#{bean.val}" disabled="true">
     <f:selectItem itemLabel="Select ..." itemValue=""/>    
     <f:selectItems id="list" value="#{bean.list}"/>          
     <a4j:ajax event="change" execute="@this" limitRender="true" 
     listener="#{bean.listener}" render="other" />                        
     </h:selectOneMenu> 
</td>
</tr>
<tr>
<td><input type="radio" id="manual" name="name" value="manual"   onclick="onclickfunction  (this);"> </input>
</td>
<td>
<h:selectOneMenu id="xyz" value="#{bean.val}" disabled="true">
     <f:selectItem itemLabel="Select ..." itemValue=""/>    
     <f:selectItems id="list" value="#{bean.list}"/>          
     <a4j:ajax event="change" execute="@this" limitRender="true" 
     listener="#{bean.listener}" render="other" />                        
     </h:selectOneMenu> 
</td>
</tr>
</table>

标签以禁用设置为true开始。禁用的属性通过javascript更改。由于我的设计选择,我必须通过javascript执行此操作。此选择标记是用户可以使用单选按钮切换的两个标记之一。我无法使用JSF radiobutton标记,因为它需要f:selectitem子标记。我只需要一个单选按钮,可以在2个选择标签之间切换。

1 个答案:

答案 0 :(得分:0)

disabled属性仅在render response期间评估true

<h:selectOneMenu ... disabled="#{facesContext.renderResponse}" />

这种方式在所有其他阶段启用,例如应用请求值和更新模型值,允许JSF收集提交的值并使用它调用setter。

另一种方法是让单选按钮使用JSF ajax或<a4j:jsFunction>来更新下拉列表。