从单选按钮更新复选框

时间:2012-02-08 11:41:16

标签: ajax jsf-2 primefaces

我正在尝试使用以下代码向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方法。而不是点击我尝试选择,更改等。我也试图把一个包装面板和更新它而不是复选框,仍然没有好处。上面的代码有什么问题?是否更新了一个带有radiobutton变化的复选框?提前致谢。

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行为。

1 个答案:

答案 0 :(得分:2)

render的{​​{1}}属性指向由<f:ajax> attribtue有条件地在服务器端呈现的组件。让它指向总是呈现的最接近的父级。

rendered

(请注意,我删除了<f:ajax listener="#{backingBean.updateMenu}" render="panelA" /> event="click",因为这些是默认设置

如果仍然无效,那么您需要阅读服务器日志以查找任何缺失的面孔消息。您会看到Validation Error: "Value is not valid"或转化错误的重大变化。为了防止在ajax呈现期间错过这些消息,请确保您以正确的方式使用execute="metalA"和/或<h:message>,并且还将它们包含在<h:messages>的{​​{1}}中1}}。

render