所以就是这样。
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
之间的区别答案 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。
我希望这是可以理解的。