更改单选按钮时有条件地呈现其他组件

Posted

技术标签:

【中文标题】更改单选按钮时有条件地呈现其他组件【英文标题】:Conditionally render other component when radiobutton is changed 【发布时间】:2015-04-15 15:29:17 【问题描述】:

如果选择了单选按钮,我将尝试显示菜单。我为此目的使用了渲染属性。

型号:

private int type; // +getter+setter

查看:

<h:selectOneRadio value="#bean.type">
    <f:selectItem itemLabel="A" itemValue="1"/>
    <f:selectItem itemLabel="B" itemValue="2"/>
</h:selectOneRadio>
<h:form id="formMention" rendered="#bean.type == 1">
    <h:selectOneMenu ...>
        <f:selectItems ... />
    </h:selectOneMenu>
</h:form>

当我检查 A 时什么都没有显示。我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

通常,您会为此使用 ajax,但由于您显然使用的是死的 JSF 1.x,它缺乏 ajax 的花哨,只要您不想要,您就可以使用“普通”html/JS引入一个支持 ajax 的组件库。其中一种方法是在单击单选按钮时直接提交表单。

<h:form>
    <h:selectOneRadio value="#bean.type" onclick="this.form.submit()">
        <f:selectItem itemLabel="A" itemValue="1"/>
        <f:selectItem itemLabel="B" itemValue="2"/>
    </h:selectOneRadio>
</h:form>
<h:form id="formMention">
    <h:selectOneMenu ... rendered="#bean.type == 1">
        <f:selectItems ... />
    </h:selectOneMenu>
</h:form>

【讨论】:

感谢您的回答。我试过这段代码,页面根本不显示。我注意到问题出在 f:ajax 上。这可能与我正在使用的 JSF 版本有关吗? (我使用的是 1.2)? 确实如此。没有人会想到现在会使用 JSF 1.x,因为它在 5 年多前已经升级到 JSF 2.0 并且已经停产了 3 年。因此,您最好始终明确指定问题中使用的 JSF 版本。我会更新答案。

以上是关于更改单选按钮时有条件地呈现其他组件的主要内容,如果未能解决你的问题,请参考以下文章

通过颤动中的单选按钮更改提升的按钮颜色

如何使选定的单选按钮根据另一个单选按钮更改另一个状态来更改一个状态?

“简单地”确定 Java 单选按钮 id

reactjs 如何处理一个组件中的多个单选按钮组?

如何在reactJs中的数组内部条件下禁用某些单选按钮

停止单选按钮更改,显示弹出窗口,然后更改单选按钮