gpt4 book ai didi

jsf - 跳过处理 p :dataTable when a button is pressed which only needs to get selected rows 内部的输入组件

转载 作者:行者123 更新时间:2023-12-04 15:11:04 25 4
gpt4 key购买 nike

我准备了一个简单的购物篮示例,仅用于演示目的。

XHTML 页面:

<p:dataTable id="cartDataTable" value="#{testManagedBean.qtyList}"
var="cart"
selection="#{testManagedBean.selectedQtyList}"
rowKey="#{cart.id}">

<p:column selectionMode="multiple" />

<p:column>
<h:outputText value="#{cart.id}"/>
</p:column>

<p:column>
<p:inputText value="#{cart.qty}"/>
</p:column>
</p:dataTable>

<p:commandButton value="Delete" process="@this cartDataTable"
actionListener="#{testManagedBean.delete}"/>

托管 bean:
@ManagedBean
@SessionScoped
public final class TestManagedBean implements Serializable
{
private List<Cart>qtyList; //Getter only.
private List<Cart>selectedQtyList; //Getter and setter.
private static final long serialVersionUID = 1L;

@PostConstruct
public void init()
{
qtyList=new ArrayList<>();
qtyList.add(new Cart(1, 1));
qtyList.add(new Cart(2, 1));
qtyList.add(new Cart(3, 2));
qtyList.add(new Cart(4, 1));
qtyList.add(new Cart(5, 3));
}

public void delete()
{
for(Cart cart:selectedQtyList) {
System.out.println(cart.getId()+" : "+cart.getQty());
}

System.out.println("Perform deletion somehow.");
}
}

这是一个 session 范围的 JSF 托管 bean,其中包含一个购物车。类(class) Cart非常直观,只有两个 Integer 类型的属性即 idqty和一个参数化的构造函数。

单击给定的删除按钮时,我们需要将要删除的选定行设置为支持 bean。

要设置选定的行, process <p:commandButton> 的属性设置为 @thiscartDataTable它将选定的行设置为 bean 的属性 selectedQtyList , 按下此按钮时。

由于这是一个 session 范围的 bean,如果用户在按下删除按钮之前不知道在任何行/秒中修改了购物车中的数量,则数量的新值/秒将设置为列表 qtyList .

这应该只在更新购物车时发生,但在删除行/s 时肯定不能再发生。

在实际应用中,删除是在单独的 View 作用域 bean 中完成的。

如果 process <p:commandButton> 的属性设置为 @this仅(即 process="@this" 从此属性中删除 cartDataTable)然后,所选行不会设置为托管 bean 属性 selectedQtyList .

如何进行?

最佳答案

据我了解,你基本上是想防止<p:inputText value="#{cart.qty}">当按下删除按钮时被处理(更新模型值)。理论上,应该只在 process 中指定选择列。属性,可惜<p:dataTable>没吃那个。另外,immediate="true"在按钮上将无济于事,因为 <p:column selectionMode>不支持。

您最好的办法是确保 rendered输入字段的属性只计算 true如果未按下删除按钮或当 JSF 呈现响应时。

<p:inputText ... rendered="#{empty param[delete.clientId] or facesContext.renderResponse}" />
...
<p:commandButton binding="#{delete}" ... />

JSF 即不会处理未呈现的输入组件。在这种情况下,bean 范围无关紧要。

关于jsf - 跳过处理 p :dataTable when a button is pressed which only needs to get selected rows 内部的输入组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24725699/

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