在JSF中使用ajax更改复选框的值



我试图解决以下问题:我有一组使用ui:repeat生成的h:selectBooleanCheckbox:

<h:form>
    <ui:repeat value="#{uiCheckboxList.list}" var="boxElement" varStatus="i">
        <h:selectBooleanCheckbox id="a">
            <f:attribute name="value" value="#{boxElement.enabled}"/>
        </h:selectBooleanCheckbox>
        <h:outputLabel value="#{boxElement.val}" for="a"/>
    </ui:repeat>
</h:form>

值和标签的文本存储在数组列表和servlet控件中:

@ManagedBean(name="uiCheckboxList")
@ApplicationScoped
public class CheckBoxListBean implements Serializable {
private ArrayList<BoxTuple> list;
// BoxTyple is class with 2 fields - val (double) and enabled (boolean)
public CheckBoxListBean() {
    list = new ArrayList<>();
    for(double i = -2.0; i <= 2.0; i += 0.5) {
        list.add(new BoxTuple(i, false));
    }
    // Set first element to true
    list.get(0).setEnabled(true);
}
public ArrayList<BoxTuple> getList() {
    return list;
}
public void setList(ArrayList<BoxTuple> list) {
    this.list = list;
}

和我的问题是这样的:当你点击一个h:selectBooleanCheckbox服务器异步发送请求与信息的变化框,然后改变另一个框的值而不重新加载页面。换句话说,我需要得到无线电盒的行为。也许这听起来很傻,但我需要解决这个问题。我如何实现这一点?

你可以这样做:

<h:form id="form">
    <ui:repeat value="#{uiCheckboxList.list}" var="boxElement"
        varStatus="i">
        <h:selectBooleanCheckbox id="a">
            <f:attribute name="value" value="#{boxElement.enabled}" />
            <f:ajax render="form"
                listener="#{uiCheckboxList.listen(boxElement)}" />
        </h:selectBooleanCheckbox>
        <h:outputLabel value="#{boxElement.val}" for="a" />
    </ui:repeat>
</h:form>

(如果你不使用varStatus就去掉它)

public void listen(BoxTuple tuple) {
    if (tuple.enabled)
        for (BoxTuple t : list)
            if (!t.equals(tuple))
                t.setEnabled(false);
}

相关内容

  • 没有找到相关文章

最新更新