Javascript JSF复杂级联单选按钮

Javascript JSF复杂级联单选按钮,javascript,html,jsf,radio-button,jsf-2,Javascript,Html,Jsf,Radio Button,Jsf 2,我需要将一个应用程序从PHP移植到JSF2。除了一个相当复杂的单选按钮组外,一切正常: 选择“处理应用程序:”时,将启用子单选按钮组。其中,当选择“其他”时,相应的文本框被启用。选择“品牌”后,将启用这两个文本框。当然,取消选择其中任何一个都会再次禁用相应的标记 除了3个独立的标记,大量javascript处理禁用/启用标记,以及更多javascript处理跨不同单选按钮选择/取消选择,使它们看起来像一组单选按钮之外,我想不出任何方法来实现这一点。有人能想出比这更好的解决办法吗?类似于自定义的

我需要将一个应用程序从PHP移植到JSF2。除了一个相当复杂的单选按钮组外,一切正常:

选择“处理应用程序:”时,将启用子单选按钮组。其中,当选择“其他”时,相应的文本框被启用。选择“品牌”后,将启用这两个文本框。当然,取消选择其中任何一个都会再次禁用相应的标记

除了3个独立的
标记,大量javascript处理禁用/启用标记,以及更多javascript处理跨不同单选按钮选择/取消选择,使它们看起来像一组单选按钮之外,我想不出任何方法来实现这一点。有人能想出比这更好的解决办法吗?类似于自定义的

谢谢

您的最佳选择是将
布局
属性设置为
排列
。这样做的另一个好处是,您可以按照自己想要的方式在HTML标记中定位各个单选按钮,而标准的
仅支持
布局
属性
页面方向
行方向
并呈现表格

然而,在使用全新的JSF2.0 Tomahawk库来满足您的功能需求,并添加
功能,以便在ajaxical Power的帮助下禁用/启用必要的组件时,不幸的是,我在Tomahawk中遇到了一个bug。在
内部,
错误地将其客户端ID而不是
中的一个作为ajax调用的参数,这导致ajax函数中断。我把它报告为

我没有看到其他干净的解决方案来满足这个复杂的(至少在JSF组件术语中)需求。在Tomahawk的人修复它之前,最好的办法是引入一个临时的基于JS的解决方案来修复onload期间ajax调用的错误参数。仅供参考,以下是表单的外观:

<style>li { list-style-type: none; }</style>
...
<h:form>
    <t:selectOneRadio id="tasks" value="#{bean.task}" layout="spread">
        <f:selectItems value="#{bean.tasks}" />
        <f:ajax event="click" render="@form" />
    </t:selectOneRadio>
    <ul>
        <li><t:radio for="tasks" index="0" /></li>
        <li><t:radio for="tasks" index="1" />
            <t:selectOneRadio id="processes" value="#{bean.process}" layout="spread" disabled="#{bean.task != 'task2value'}">
                <f:selectItems value="#{bean.processes}" />
                <f:ajax event="click" render="@form" />
            </t:selectOneRadio>
            <ul>
                <li><t:radio for="processes" index="0" /></li>
                <li><t:radio for="processes" index="1" /></li>
                <li><t:radio for="processes" index="2" />
                    <h:inputText value="#{bean.otherProcess}" disabled="#{bean.process != 'process3value'}" />
                </li>
            </ul>
        </li>
        <li><t:radio for="tasks" index="2" />
            <ul>
                <li><h:inputText value="#{bean.brand1}" disabled="#{bean.task != 'task3value'}" /></li>
                <li><h:inputText value="#{bean.brand2}" disabled="#{bean.task != 'task3value'}" /></li>
            </ul>
        </li>
    </ul>
</h:form>
li{列表样式类型:无;}
...

很遗憾,标准JSF实现不支持这样灵活的radiobutton组件

像往常一样棒!非常感谢。我还没有和我的脸一起工作过,但我会尝试一下。再次感谢!注意,“MyFaces”实际上是另一个JSF实现(与Mojarra竞争)。你不应该用MyFaces来代替Mojara。Tomahawk是MyFaces开发的一个扩展组件库,但是您可以在Mojarra或任何其他JSF实现中使用它。