Struts2的迭代器、set、if-else标记(获取s:radio的值并应用if-else)

Struts2的迭代器、set、if-else标记(获取s:radio的值并应用if-else),struts2,iterator,Struts2,Iterator,我有一个jsp页面,其中有两个单选按钮和一个select标记。现在,如果单击第一个单选按钮,我想使选择标记禁用,但我无法执行此操作,我已尝试使用“disabled”属性。下面是代码。 Jsp页面 选择父发现实验室 所有的getter和setter方法都是固定的。没有javascript这可能吗?我对您的代码块有点困惑,但我想我理解您的目标。像这样的东西应该有用 <tr> <td> <s:radio name="r

我有一个jsp页面,其中有两个单选按钮和一个select标记。现在,如果单击第一个单选按钮,我想使选择标记禁用,但我无法执行此操作,我已尝试使用“disabled”属性。下面是代码。 Jsp页面


选择父发现实验室


所有的getter和setter方法都是固定的。没有javascript这可能吗?

我对您的代码块有点困惑,但我想我理解您的目标。像这样的东西应该有用

    <tr>
        <td>
            <s:radio name="radio_SelectedValue" list="%{radioList}" listKey="ObjectKey" listValue="ObjectName" value="DefaultObject"/>                                  
        </td>
    </tr>

    <s:if test="%{radio_SelectedValue.equals('myChosenValueFromTheList')}">
             <s:select name="select_SelectedValue" headerKey="-1" headerValue=" " list="ObjectList" listKey="ObjectList.Key" listValue="ObjectList.Value" />       
    </s:if><s:else>
        <s:select name="select_SelectedValue" headerKey="-1" headerValue=" " list="ObjectList" listKey="ObjectList.Key" listValue="ObjectList.Value" disabled="disabled" />   
    </s:else>       


我不确定你在用这些标记的迭代器做什么,它们自己处理列表传播。只需告诉标签要使用什么列表,struts就会适当地填充标签。然后,当页面呈现时,您可以根据radio的值进行条件设置,并对select标记执行魔术,如上图所示。

No您必须使用javascript(或类似jQuery的JS框架)解决此类问题。只发布生成的html而不是jsp,用jQuery和或javascript标记问题,你会得到很多好的答案。@Quaternion:谢谢你的时间和考虑。我想知道,如果我知道,我们可以用另一种方式(除了JQuery)。因为从逻辑上讲,如果我们认为这是不可能的。如果我错了,请纠正我。谢谢:)JSP在服务器上。如果没有java脚本,那么您发送的就是客户机得到的。不会有动态行为,就像你发送了一张图片一样。使用java脚本发送程序时,如果客户机单击下拉菜单,您现在可以使用JS描述页面其他部分的行为。有一些web框架工程将动态功能内置到标记中(标记为我们在客户机上编写JS)。事实上,Struts2有一组ajax标记,但是它们被弃用了,这是有充分理由的。简单地说,这样的标签太脆弱了,也就是说,它们将达到预期的目的,但更多的时候,我们需要的只是一些不同的东西。然后,您不妨从头开始编写JS。想象一下,尝试使用一堆xml标记来编写Java,这毫无意义,对于JS来说更是如此。结论,直接使用JS。jQuery让它变得更有趣。@Quaternion:非常感谢你这么好的解释,以前我想做一些不同的事情,违背文化……但多亏了你,我学会了使用jQuery等的主要原因。很高兴成为哑巴,因为我能从你们身上学到很多东西……:)谢谢你的时间和考虑。我使用迭代器(对于单选按钮)在不同的行中显示单选按钮,如果我没有使用迭代器,单选按钮将显示在同一行中。关于“”您给出的解决方案不起作用,只执行else条件。:)If语句默认为false,这意味着未按预期返回属性。在这种情况下,我通常将我的值插入一个s:property标记,以查看哪些内容被推入值堆栈。因此,只需获取要检查的值,并执行s:property value='myValue',然后查看返回的内容。我认为四元数是正确的。我们走错了实现目标的道路,JQuery是更好的选择。顺便说一句,谢谢你的时间和考虑,如果你发现了什么新的东西,如果你有任何关于我的问题的例子,请分享..谢谢:)编码愉快。
    <tr>
        <td>
            <s:radio name="radio_SelectedValue" list="%{radioList}" listKey="ObjectKey" listValue="ObjectName" value="DefaultObject"/>                                  
        </td>
    </tr>

    <s:if test="%{radio_SelectedValue.equals('myChosenValueFromTheList')}">
             <s:select name="select_SelectedValue" headerKey="-1" headerValue=" " list="ObjectList" listKey="ObjectList.Key" listValue="ObjectList.Value" />       
    </s:if><s:else>
        <s:select name="select_SelectedValue" headerKey="-1" headerValue=" " list="ObjectList" listKey="ObjectList.Key" listValue="ObjectList.Value" disabled="disabled" />   
    </s:else>