f:hj上的ajax:selectManyCheckbox在ui中不起作用:repeat:找不到组件

时间:2013-04-12 11:53:55

标签: ajax jsf primefaces uirepeat

我遇到以下问题:我在h:selectManyChecbox内使用ui:repeat。值更改侦听器附加到组件,以及f:ajax。我希望在每次选择/取消选择时触发事件,然后操作辅助bean中的某些值并相应地更新视图。我将其缩小为以下示例:

JSF Page

<ui:repeat id="loop" value="#{testAction.stringListe}" var="string">
            <h2>#{string}</h2>

            <h:inputText id="input" value="#{testAction.testInt}" />

            <h:selectBooleanCheckbox value="#{testAction.testBoolean}"
                                     id="checkbox"
                                     valueChangeListener="#{testAction.valueChangeListener}">
                <f:ajax render="input" />
            </h:selectBooleanCheckbox>
            <h:outputLabel for="checkbox" value="Change Me!"/>

            <h:selectManyCheckbox id="options"
                                  value="#{testAction.selections}"
                                  layout="pageDirection"
                                  valueChangeListener="#{testAction.valueChangeListener}">
                <f:ajax render="input" />
                <f:selectItem itemValue="changeMe" itemLabel="Change me!" />
                <f:selectItem itemValue="changeToo" itemLabel="Me too!" />
            </h:selectManyCheckbox>
        </ui:repeat>

Backing Bean

public class TestAction {

    private boolean testBoolean;
    private int testInt;
    List<String> stringListe = new ArrayList<String>();
    List<String> selections = new ArrayList<String>("Number 1", "Number 2");
    // Getter +  Setter accordingly

    public void valueChangeListener(ValueChangeEvent event) {
        testInt = (int) (Math.random() * 100);
        System.out.println(testInt);
    } 

对于此设置,我收到以下错误:

<f:ajax> contains an unknown id 'form:loop:0:options' - cannot locate it in the context of the component options

看起来,渲染目标在这里不是问题。相反,ajax执行的隐含@this似乎失败了。换句话说:组件找不到自己。奇怪的是,这仅适用于selectManyCheckbox。单个复选框很好。我假设这是因为selectMany类型充当“内部循环”,所以我们在这里有两个嵌套循环。这听起来与我在this question中提出的问题非常熟悉,只是在那里导致问题的渲染目标。

所以我的问题是:这是预期的行为吗?或者它是实现中的一些已知错误?我问,因为selectManyListBox和selectManyMenu工作得很好...... 无论如何,我正在寻找解决这个问题的方法。还有其他人有类似的问题吗?

注意:不幸的是,c:foreach是没有选项,否则我已经尝试过了;)摆弄execute参数没有效果(例如execute = @ form)。

编辑:当使用Primefaces中的p:ajax时,此功能正常。如果有其他有用的答案,我会暂时保持开放状态一段时间。如果有人知道p:ajax的不同之处,那么知道这一点也很有趣。

0 个答案:

没有答案