如何动态地向p:dataTable添加新行而不验证表单?

Mar*_*lte 3 forms jsf primefaces

我正在开发一个用JSF和PrimeFaces添加/编辑产品价格的表单.单个产品可以有多种价格,具体取决于体积,如图所示<p:dataTable>.

支持bean:

@ManagedBean
@ViewScoped
public class ProductBean {

  protected Product product;
  protected List<ProductPrice> productPrices;

  public void addNewPrice() {
    ProductPrice productPrice = new ProductPrice();
    productPrice.setPrice(new BigDecimal(0));
    this.productPrices.add(productPrice);
  }

  // ...
}
Run Code Online (Sandbox Code Playgroud)

Facelet页面:

<h:form id="productForm">
  <p:inputText value="#{productBean.product.name}" required="true">
    <f:ajax event="blur" render="nameMessage" />
  </p:inputText>
  <p:message id="nameMessage" for="name" />

  <p:dataTable id="pricesList" ...>
  </p:dataTable>
  <p:commandButton value="Add another price" update="pricesList" action="#{productBean.addNewPrice()}" />
  <p:commandButton value="Submit" action="#{productBean.submit}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)

第一个按钮"添加另一个价格",它应该做什么:向"pricesList"添加一个新行.但仅当表单有效时(表单无效,如果未设置product-name).

我的问题是,我有两个commandButtons用于表单,但我不知道如何在没有commandButton的情况下获得我希望的函数.我尝试了很多方法:将"添加另一个价格"更改为<p:button>具有ajax功能的标准; 由于按钮的结果不起作用.我为这个按钮尝试了"type = button",但在这种情况下,没有任何反应.

有什么建议要实现我希望的功能吗?没有必要按钮解决我的问题.

Bal*_*usC 7

<p:commandButton>通过的提交和处理违约整个表单.这确实会验证所有输入字段.您可以使用process默认的属性来控制它@form.在您的特定情况下,您可以使用,@this以便仅调用命令按钮自己的操作.

<p:commandButton value="Add another price" process="@this" update="pricesList" action="#{productBean.addNewPrice()}" />
Run Code Online (Sandbox Code Playgroud)