直接绑定值到JSF selectItem没有p:selectManyCheckbox值

问题描述:

所以就是这样。直接绑定值到JSF selectItem没有p:selectManyCheckbox值

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(一些真实的和一些虚假)

PS:另外我不能了解itemLabel,标签,项目值之间的差额,价值

值对是否使用两个<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(如在一个复选框或选择项目值和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列表将得到所有选定的项目。标记采用枚举中的所有可能选项(您可以移交任何集合),并遍历集合中的每个“forname”对象。在这种情况下,itemValue表示自己,因为我们有一个要保存的对象的列表,对于标签,我们称之为toString-Method。

我希望这解释可以理解。

+0

是的,这就是答案,我昨天做了这件事,但它仍然无法正常工作,不知何故,当我打开p:tab时,primefaces只会将setter设置为false,并将其设置为false。 (不是在我的类ReadWrite的String accessItem的setter) 但这是另一个问题,也许我会打开另一个问题。 – Azteca 2014-10-07 16:48:30

+0

呃...我从上面的代码中删除了它,但是我在acordeonPanel上有Dynamic = true,所以懒加载正在做一些奇怪的事情。仍然tyvm采取你的时间。干杯 – Azteca 2014-10-07 16:53:37

+0

懒惰的加载功能在理论上是不错的,但不适用于太多事件,ajax等...... 我没有得到你想要做的与accessItem的setter。在你的代码中,属性是只读的(通过输出文本)。请告诉我,如果你还有其他问题。干杯 – Dawn 2014-10-08 06:11:30

itemlabel和项目值之间的不同之处在于itemlabel是标签显示和项目值的是选择