3

我正在尝试使用“panelGrid”中的表单来呈现dataTableusing中的值<f:ajax>。但是,使用 提交时,<h:commandButton>发送的值不会显示在dataTable. 我没有在浏览器中收到堆栈或任何控制台错误。

这是我的 xhtml(简体):

产品目录:

    <p:tabView id="tabView" style="width: 65%" >
            <p:tab id="books" title="Books">
                <p:dataGrid var="book" value="#{saleBean.productList}" columns="3"
                            rows="9" paginator="true" paginatorTemplate="{CurrentPageReport} 
                            {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} 
                            {LastPageLink} {RowsPerPageDropdown}"
                            rowsPerPageTemplate="3,6,9">
                    <h:form id="product" >
                    <p:panel header="#{book.name}" style="text-align: center">


                            <h:panelGrid columns="1" style="width: 65%">

                                <!-- Add Book Images here -->
                                <h:outputText value="#{book.price}"/>

                                <h:outputLabel value="Dct (in dollars): " />
                                <h:inputText id="discount" value="#{saleBean.item.unit_discount}" style="width: 50%" />

                                <p:commandButton value="Add to Cart" update=":dataTableForm:sc" 
                                                 action="#{saleBean.doAddItem}"/>


                            </h:panelGrid>


                    </p:panel>
                    </h:form>          
                </p:dataGrid>
            </p:tab>

            <p:tab id="arts" title="Art / Various">
                <!-- Art Products to be added here -->
            </p:tab>

            <p:tab id="other" title="Other">
                <!-- Various Products to be Added here -->
            </p:tab>

    </p:tabView>


    <hr/>        
    <h1>Shopping Cart</h1>
    <hr/>

    <h:form id="dataTableForm">
    <p:dataTable id="sc" value="#{saleBean.sd}" var="item" style="width: 60%">

        <p:column>
            <f:facet name="header">
                <h:outputText value="Product"/>
            </f:facet>
            <h:outputText value="#{item.product_fk}"/>
        </p:column>
        <p:column>
            <f:facet name="header">
                <h:outputText value="Quantity"/>
            </f:facet>
            <h:outputText value="#{item.quantity}"/>
        </p:column>
        <p:column>
            <f:facet name="header">
                <h:outputText value="Unit Price"/>
            </f:facet>
            <h:outputText value="#{item.unit_Cost}"/>
        </p:column>
        <p:column>
            <f:facet name="header">
                <h:outputText value="Unit Discount"/>
            </f:facet>
            <h:outputText value="#{item.unit_discount}"/>
        </p:column>

    </p:dataTable>
    </h:form>

</h:body>

这是 bean(简体):

   public String doAddItem()
    {
        item.setUnit_Cost(product.getPrice());        
        item.setProduct_fk(product);
        item.setQuantity(1);
        sd.add(item); 

        return "productCatalog";
    }
4

2 回答 2

1

根据 PrimeFaces 文档:

http://www.primefaces.org/docs/vdl/3.4/primefaces-p/commandButton.html

actionListener="#{saleBean.doAddItem}"必须使用与该功能相对应的功能:

public void doAddItem(ActionListener event)
{
    // do your stuff
}

在这里使用动作是一个例子:

action="#{saleBean.doAddItem}"

public String doAddItem(void)
{

    item.setUnit_Cost(product.getPrice());        
    item.setProduct_fk(product);
    item.setQuantity(1);
    sd.add(item); 

    return "productCatalog";
}
于 2012-11-19T23:11:26.693 回答
0

尽量只使用 pf 组件,例如 p:datatable。将按钮替换为 ap:commandButton 并使用 process and update 而不是 f:ajax。

另外,也许最好将 p:datatable 也包含在表单中。

于 2012-11-17T10:11:39.327 回答