我正在使用<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>
标记以disabled设置为true开始。禁用的属性通过javascript进行更改。由于我的设计选择,我不得不通过javascript来完成这项工作。该选择标记是用户可以使用单选按钮切换的两个标记之一。我不能使用JSF单选按钮标记,因为它需要一个f:selectemchild标记。我只需要一个单选按钮在2个选择标签之间切换。
仅在渲染响应期间让disabled
属性评估true
。
<h:selectOneMenu ... disabled="#{facesContext.renderResponse}" />
通过这种方式,它可以在所有其他阶段启用,比如应用请求值和更新模型值,允许JSF收集提交的值并用它调用setter
另一种选择是让单选按钮使用JSF-ajax或<a4j:jsFunction>
来更新下拉列表。