使用primefaces 5的数据表中的复选框

时间:2014-08-21 13:17:30

标签: jsf-2 checkbox primefaces datatable

我的数据表存在问题。

我尝试显示表的选定行,但我不能,因为即使我检查了一行或多行,我的选择列表也是空的。看来我有一个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...}

1 个答案:

答案 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的行为将类似于@RequestScopedjavax.faces.view仅在您使用@Named而非@ManagedBean时使用。{/ p>