我的数据表存在问题。
我尝试显示表的选定行,但我不能,因为即使我检查了一行或多行,我的选择列表也是空的。看来我有一个selectedArticles为空我不知道我的代码的哪一部分我应该改变吗。我请求你的帮助。 我的jsf页面:
<h:body>
<h:form id="form">
<p:growl id="msgs" showDetail="true" />
<p:panel header="Order" style="margin-bottom:10px;">
<h:panelGrid columns="2" cellpadding="5">
<p:outputLabel for="category" value="Category: " />
<p:selectOneMenu id="category" value="#{catBean.category}" var="line" style="width:150px">
<p:ajax listener="#{catBean.onCategoryChange}" update="product" />
<f:selectItem itemLabel="Select Category" itemValue="" noSelectionOption="true" />
<f:selectItems value="#{catBean.myItems}" />
</p:selectOneMenu>
<p:outputLabel for="product" value="" />
<p:dataTable id="product" var="line" value="#{catBean.myProducts}" selection="#{catBean.selectedItems}" style="margin-bottom:0" rowKey="#{line.cdProduct}">
<p:column selectionMode="multiple" style="width:16px;text-align:center"/>
<p:column headerText="Code">
<h:outputText value="#{line.cdProduct}" />
</p:column>
<p:column headerText="title" >
<h:outputText value="#{line.title}" />
</p:column>
<f:facet name="footer">
<p:commandButton process="product" update=":form:multiProductDetail" icon="ui-icon-search" value="View" oncomplete="PF('multiProductDialog').show()" />
</f:facet>
</p:dataTable>
<p:dialog header="Products" widgetVar="multiProductDialog" modal="true" showEffect="fade" hideEffect="fade" resizable="false" width="auto">
<p:outputPanel id="multiProductDetail" style="text-align:center;">
<ui:repeat value="#{catBean.selectedItems}" var="line">
<h:outputText value="#{line.cdProduct} -- #{line.title}" style="display:block"/>
</ui:repeat>
</p:outputPanel>
</p:dialog>
</h:panelGrid>
</p:panel>
</h:form>
</h:body>
</html>
我的managedBean包含此属性
@ManagedBean(name="catBean")
@ViewScoped
public class catBean implements Serializable {
private String cdCategory;
private String category;
private List<SelectItem> myItems;
private List<Product> selectedItems=new ArrayList<Article>();
{geters and setters...}
答案 0 :(得分:0)
鉴于<p:dataTable value>
由<p:selectOneMenu><p:ajax listener>
填充,因此用于选择的<p:dataTable value>
的可用性取决于视图范围,您需要绝对确定该bean也是视图范围。否则,<p:dataTable value>
在回发期间将默认为null
,并且没有任何内容可供选择。
这些注释很好,
@ManagedBean(name="catBean")
@ViewScoped
public class catBean implements Serializable {
但您需要确保从javax.faces.bean
包中导入它们。如果您从@ViewScoped
导入javax.faces.view
,那么该bean的行为将类似于@RequestScoped
。 javax.faces.view
仅在您使用@Named
而非@ManagedBean
时使用。{/ p>