代码之家  ›  专栏  ›  技术社区  ›  craigcaulfield

JPA支持bean中未反映的编辑[重复]

  •  0
  • craigcaulfield  · 技术社区  · 7 年前

    我一直在关注@BalusC的例子 Creating master-detail table and dialog, how to reuse same dialog for create and edit Understanding PrimeFaces process/update and JSF f:ajax execute/render attributes ,尝试获取一个小表单来编辑一些数据,然后保存。但是,当我试图保存数据时,我看不到支持bean中反映的更改。

    我有一个简单的表单,我预先填充了一些数据,在保存之前可以对其进行编辑:

    <h:form id="productSummaryForm">
        <h:panelGrid columns="2" columnClasses="label, value">
            <h:outputText value="Product name:" />
            <p:inputText id="productNameInputText" value="#{editProduct.product.productName}" required="true" requiredMessage="Enter Product Name" size="32">
                <p:watermark value="The name of the product" for="productNameInputText"/>
            </p:inputText>
    
            <h:outputText value="Output name:" />
            <p:inputText id="outputNameInputText" value="#{editProduct.product.outputName}" size="32">
                <p:watermark value="Output name" for="outputNameInputText"/>
            </p:inputText>
        </h:panelGrid>
    
        <h:panelGrid columns="3" styleClass="buttonPanelGrid">
            <p:commandButton value="Cancel"  immediate="true" action="#{productController.cancel}"/>
            <p:commandButton id="saveButton" value="Save" process="@this" immediate="true" action="#{editProduct.saveProduct}"/>
        </h:panelGrid>
    </h:form>
    

    控制器为:

    @Named
    @ViewScoped
    public class EditProduct implements Serializable {
    
        private Product product;  // JPA Entity
    
        @Inject
        protected ProductService productService;
    
        public String saveProduct() {
            productService.saveProduct(product);
            return "/product?faces-redirect=true";
        }
    }
    

    当我调试时 saveProduct() ,我通过UI所做的任何编辑都不会反映在 product 我保存的。我尝试添加 inputText 到的ID process 属性(例如 process="@this outputNameInputText" ),仍然没有反映出这些变化。

    我尝试过的所有不同属性组合 saveButton 改变了什么,这让我想 Product 问题是:它是一个JPA实体。听起来对吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   craigcaulfield    7 年前

    所以,这里 我的一个组件出现验证错误,我在中的列表中找到了该错误 commandButton/commandLink/ajax action/listener method not invoked or input value not set/updated . 在此过程中 Understanding PrimeFaces process/update and JSF f:ajax execute/render attributes ,我发现有不止一种方法可以满足我的需要:

    依赖于默认PrimeFaces process="@form" 行为:

    <p:commandButton id="saveButton" value="Save" action="#{editProduct.saveProduct}"/>
    

    或者,为了明确起见:

    <p:commandButton id="saveButton" value="Save" process="@form" 
        action="#{editProduct.saveProduct}"/>
    

    使用PrimeFaces方法仅处理某些表单字段:

    <p:commandButton id="saveButton" value="Save" 
        process="@this outputNameInputText productNameInputText" 
        action="#{editProduct.saveProduct}"/>
    

    而且,在没有PrimeFaces的情况下进行:

    <h:commandButton id="saveButton" value="Save" action="#{editProduct.saveProduct}">
        <f:ajax execute="@form" render="@all"/>
    </h:commandButton>