直接绑定值到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。
我希望这解释可以理解。
答
itemlabel和项目值之间的不同之处在于itemlabel是标签显示和项目值的是选择
是的,这就是答案,我昨天做了这件事,但它仍然无法正常工作,不知何故,当我打开p:tab时,primefaces只会将setter设置为false,并将其设置为false。 (不是在我的类ReadWrite的String accessItem的setter) 但这是另一个问题,也许我会打开另一个问题。 – Azteca 2014-10-07 16:48:30
呃...我从上面的代码中删除了它,但是我在acordeonPanel上有Dynamic = true,所以懒加载正在做一些奇怪的事情。仍然tyvm采取你的时间。干杯 – Azteca 2014-10-07 16:53:37
懒惰的加载功能在理论上是不错的,但不适用于太多事件,ajax等...... 我没有得到你想要做的与accessItem的setter。在你的代码中,属性是只读的(通过输出文本)。请告诉我,如果你还有其他问题。干杯 – Dawn 2014-10-08 06:11:30