将值直接绑定到JSF selectItem,不带p:selectMany复选框值



所以它是这样的。

MyMb:

@Named("MyMb")
@SessionScoped
public class MySuperCoolMb implements Serializable {
    //Tons of attributes
    private List<ListModelOne> lmo = new ArrayList();
    //Tons of methods
}

Outter型号:

public class ListModelOne {
    private coolObject object;
    private List<ReadWrite> permissions;
    //init()
    //setters-getters
}

内部模型,这是需要直接绑定到屏幕上的selectItems的模型

public class ReadWrite {
    private String accessItem;
    private boolean read = false;
    private boolean write = false;
    //Somewhere in my code i change this from true/false depending
    //what i need and they do change in title in xhtml.
    //setters-getters
}

还有我的xhtml:

<h3>Cool Title</h3>
<p:accordionPanel value="#{MyMb.lmo}" var="modelOne">
    <p:tab title="#{modelOne.coolObject.ObjectName}">
    <h3>Cool Inner Title</h3>
        <ui:repeat value="#{modelOne.permissions}" var="readWrite">
            <h:panelGrid>
            <h:outputText value="#{readWrite.accessItem}"/>
                <!-- selectManyCheckbox has no value attribute because i don't need/have a list/collection to bind it -->
                <p:selectManyCheckbox>
                    <f:selectItem itemLabel="Read" itemValue="#{readWrite.read}" title="This is set to #{readWrite.read}"/>
                    <f:selectItem itemLabel="Write" itemValue="#{readWrite.write}" title="This is set to #{readWrite.write}"/>
                </p:selectManyCheckbox>
            </h:panelGrid>
        </ui:repeat>
    </p:tab>
</p:accordionPanel>

一切都很好,但复选框(selectItem),它们可以直接绑定到类的属性并忽略p:selectManyCheckboxes的值吗?在java上一切都很好,我已经调试过了,值是正确的,他们甚至在f:selectItem的"tittle"属性上打印OK(有些是true,有些是false)

PS:我也不明白ItemLabel,label,ItemValue,Value 之间的区别

有什么反对使用两个<p:selectBooleanCheckbox>的方面吗?

否则我会提出这样的代码:

<h:panelGrid>
    <h:outputText value="#{readWrite.accessItem}"/>
    <p:selectBooleanCheckbox value="Read" itemLabel="#{readWrite.read}" />
    <p:selectBooleanCheckbox value="Write" itemLabel="#{readWrite.write}" />
</h:panelGrid>

看看这个:http://www.primefaces.org/showcase/ui/input/booleanCheckbox.xhtml

如果您想动态生成selectOptions(如复选框或下拉菜单中的选项等),则使用ItemValue和ItemLabel。示例:

// Java-class...
@Named(
public enum SelectOption(){
    Max, Oliver, John;
}
// In bean...
private List<SelectOption> fornames; // with setter & getter
// In xhtml...
<p:selectManyCheckbox value="#{bean.fornames}">
    <f:selectItems value="#{bean.fornames.values()}" var="forname" 
        itemValue="#{forname}" itemLabel="#{forname.toString()}" />
</p:selectManyCheckbox>

说明:bean中的List将获取所有选定的项。f:selectItems-标记从枚举中获取所有可能的选项(您可以移交任何集合),并迭代集合中的每个"forname"-对象。在这种情况下,itemValue表示自己,因为我们有一个要保存的对象列表,对于标签,我们调用toString方法。

我希望这个解释可以理解。

itemlabel和ItemValue之间的区别在于itemlabel是显示的标签,ItemValue是用于选择的值

最新更新