【问题标题】:Updating a checkbox from a radio button从单选按钮更新复选框
【发布时间】:2012-02-08 11:41:16
【问题描述】:

我正在尝试使用此代码向 selectoneradio 添加 ajax 行为:

xhtml:

<h:selectOneRadio id="metalA" converter="metalConverter" value="#{backingBean.metal.metalCode">
    <f:selectItems value="#{backingBean.metalCodeRadio}" />
    <f:ajax listener="#{backingBean.updateMenu}" event="click" execute="metalA" render="metalTypeMenuA"/>
</h:selectOneRadio>

<p:outputPanel id="panelA">
    <h:selectOneMenu id="metalTypeMenuA" converter="metalConverter" value="#{backingBean.order.metal}" rendered="#{teklifIslemleriBean.selectedITip == 1}">
            <f:selectItems value="#{backingBean.metalDetailsMenu}" />
        </h:selectOneMenu>
</p:outputPanel>

支持 bean:

MetalCode selectedMK = null;

public void updateMenu(AjaxBehaviorEvent event) {            

        System.out.println("Entered to updateMenu method");

        if (metal.getMetalKod()!= null) {
            electedMK = aMetal.getMetalCode();            
        }        

        if (selectedMK != null) {
            // metalTypeMenuA Combobox
            List<Metal> metalList = aService.getAccToMetalCode(null, selectedMK);
            System.out.println("MetalList:" + metalList.size());
            metalTypeMenuA.clear();
            for (Metal m : metalList) {
                metalTypeMenuA.add(new SelectItem(m, "No:" + m.getMetalNo() +  " ,Weight: " + m.getWeight();
            }
        }
    }

但是它甚至没有进入 updateMenu 方法。而不是单击我尝试选择、更改等。我还尝试放置一个包装面板并更新它而不是复选框,但仍然没有好处。上面的代码有什么问题?是否可以通过更改单选按钮来更新复选框?提前致谢。

JSF 2.0 Primefaces 2.2.1

编辑: 我添加了以下

<h:message for="metalA" id="messaged"/>

<f:ajax listener="#{backingBean.updateMenu}" event="click" execute="metalKoduA" execute="metalA" render="messaged orderPG2"/> 

orderPG2 是复选框的包装器。但我仍然可以在 h:message 中收到任何错误消息或发生任何 ajax 行为。

【问题讨论】:

    标签: ajax jsf-2 primefaces


    【解决方案1】:

    &lt;f:ajax&gt;render 属性应该指向一个组件,该组件本身由rendered 属性有条件地在服务器端呈现。让它指向总是被渲染的最近的父级。

    <f:ajax listener="#{backingBean.updateMenu}" render="panelA" />
    

    (请注意,我删除了 event="click"execute="metalA",因为它们已经是默认值了)

    如果这仍然不起作用,那么您需要阅读服务器日志以查找任何丢失的面孔消息。您将看到 Validation Error: "Value is not valid" 或可能是转换错误的重大变化。为防止在 ajax 渲染期间遗漏这些消息,请确保您以正确的方式使用 &lt;h:message&gt; 和/或 &lt;h:messages&gt;,并且您还将它们包含在 &lt;f:ajax&gt;render 中。

    <h:selectOneRadio id="metalA" ...>
        ...
        <f:ajax ... render="metalAmessage panelA" />
    </h:selectOneRadio>
    <h:message id="metalAmessage" for="metalA" />
    

    【讨论】:

    • 首先,感谢您的详细回答。我尝试渲染一个包含复选框的面板组件,仍然没有结果。它重新渲染面板,但甚至不进入支持 bean 中的方法。我阅读了服务器日志,找不到任何相关的日志条目。我知道著名的“值无效”错误!我花了两天时间才找出原因! :) 实际上我已经在使用 。但它没有显示任何错误消息。我会试试 h:message。
    • 我也尝试了 h:message 但没有任何反应..(我添加了上面的代码)
    • 我认为 selectoneradio 的 ajax 行为存在错误。经过 2 天的工作,我将其更改为 selectonemenu,瞧!它就像一个魅力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2010-10-27
    相关资源
    最近更新 更多