2

我有以下问题:我正在使用 a h:selectManyChecboxinside a ui:repeat。值更改侦听器附加到组件,以及f:ajax. 我希望在每次选择/取消选择时触发事件,然后操作支持 bean 中的一些值并相应地更新视图。我将其简化为以下示例:

JSF 页面

<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>

支持豆

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 类型充当“内循环”,所以我们在这里有两个嵌套循环。这听起来对我在这个问题中提出的问题很熟悉,只是渲染目标导致了问题。

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

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

编辑:这在使用p:ajaxPrimefaces 时有效。无论如何,如果有其他有用的答案,我会保持开放一段时间。如果有人知道 p:ajax 的不同之处,这也很有趣。

4

0 回答 0