直接将值绑定到JSF selectItem而不使用p:selectManyCheckbox值

时间:2014-10-06 20:44:02

标签: jsf jsf-2 primefaces nested

所以就是这样。

MyMb:

@Named("MyMb")
@SessionScoped
public class MySuperCoolMb implements Serializable {
    //Tons of attributes

    private List<ListModelOne> lmo = new ArrayList();

    //Tons of methods
}

Outter Model:

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(有些是真的,有些是假的)

PS:我也无法理解ItemLabel,label,ItemValue,Value

之间的区别

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

是否有任何方面反对使用两个<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 - 标记从枚举中获取所有可能的选项(您可以移交任何集合),并迭代集合中的每个&#34; forname&#34; -object。在这种情况下,itemValue表示自己,因为我们有一个要保存的对象列表,对于标签,我们称之为toString-Method。

我希望这是可以理解的。