ajax - JSF PrimeFaces/Ajax 渲染到 Datable 无法将项目添加到列表

标签 ajax jsf-2 primefaces managed-bean session-scope

我正在尝试使用“panelGrid”中的表单来呈现 dataTable 中的值使用 <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";
    }

最佳答案

根据 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 是一个例子:

action="#{saleBean.doAddItem}"

public String doAddItem(void)
{

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

    return "productCatalog";
}

关于ajax - JSF PrimeFaces/Ajax 渲染到 Datable 无法将项目添加到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13426395/

相关文章:

javascript - 读取JS变量

jsf - 触发操作后,选项卡 View 中的 Primefaces 确认对话框不会隐藏

jsf-2 - 将调用的托管 bean actionListener 记录在 PhaseListener 中

java - 在 p :dialog 中使用 JSF 解析 HTML

ajax - p :ajax fires twice

css - Primefaces 选项卡标题样式

javascript - 如何将变量保存到 JSON 文件?

javascript - 为什么 jquery 看不到 html 的变化?

javascript - 当达到第 3 方 API 的速率限制时,jQuery/AJAX 设置超时

jsf - 使用 p :commandbutton 提交多个表单