gpt4 book ai didi

forms - 如何动态添加新行到p :dataTable without validating the form?

转载 作者:行者123 更新时间:2023-12-02 21:16:21 25 4
gpt4 key购买 nike

我正在开发一个用于使用 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);
}

// ...
}

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>

第一个按钮“添加另一个价格”的作用是:向“pricesList”添加新行。但仅当表单有效时(如果未设置产品名称,则表单无效)。

我的问题是,我的表单有两个命令按钮,但我不知道如何在没有命令按钮的情况下获得我想要的功能。我尝试了很多方法:将“添加另一个价格”更改为标准<p:button>具有ajax功能;由于按钮的结果而不起作用。我尝试了此按钮的“type=button”,但在这种情况下根本没有任何反应。

有什么建议可以实现我想要的功能吗?没有必要用一个按钮来解决我的问题。

最佳答案

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

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

关于forms - 如何动态添加新行到p :dataTable without validating the form?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12571759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com