未反映在 JPA 支持 bean 中的编辑
Edits not reflected in JPA backing bean
我一直在关注 创建主从 table 和对话框中的@BalusC 示例,如何重用相同的对话框进行创建和编辑
和 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"
),但仍未反映更改。
None 我在 saveButton
上尝试的不同属性组合改变了任何东西,这让我认为 Product
是问题所在:它是一个 JPA 实体。听起来对吗?
因此, 我的一个组件出现了验证错误,这是我通过查看 commandButton/commandLink/ajax action/listener method not invoked or input value not set/updated 中的列表发现的。在完成这个和了解 PrimeFaces process/update 和 JSF f:ajax execute/render 属性的过程中
,我发现有不止一种方法可以满足我的需要:
依赖默认的 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>
我一直在关注 创建主从 table 和对话框中的@BalusC 示例,如何重用相同的对话框进行创建和编辑 和 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"
),但仍未反映更改。
None 我在 saveButton
上尝试的不同属性组合改变了任何东西,这让我认为 Product
是问题所在:它是一个 JPA 实体。听起来对吗?
因此, 我的一个组件出现了验证错误,这是我通过查看 commandButton/commandLink/ajax action/listener method not invoked or input value not set/updated 中的列表发现的。在完成这个和了解 PrimeFaces process/update 和 JSF f:ajax execute/render 属性的过程中 ,我发现有不止一种方法可以满足我的需要:
依赖默认的 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>