我有<ui:repeat>
<ui:inputText>
:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
template="./templates/masterLayout.xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<ui:define name="content">
<ui:repeat value="#{genproducts.dbList()}" var="itemsBuying">
<div class="indproduct">
<p class="center">#{itemsBuying.name}</p>
<div class="center">
<h:form style="margin-left: auto; margin-right: auto;">
<h:inputText value="#{itemsBuying.amount}" />
<h:commandLink action="#{shoppingCart.addToCart(itemsBuying)}" value="add" />
</h:form>
</div>
</div>
</ui:repeat>
</ui:define>
</ui:composition>
这是#{genproducts}
支持bean:
@ManagedBean(name = "genproducts")
@ViewScoped
public class Genproducts{
public List<Product> dbList() throws SQLException {
List<Product> list = new ArrayList<>();
...
return list;
}
}
这是Product
实体:
@ManagedBean(name = "product")
@RequestScoped
public class Product {
private int amount;
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
}
就我而言,dbList()
方法有四种产品。对于前三个产品,当我输入不同的值时,默认值显示在action方法中。仅适用于最后一个产品,它按预期工作。
这是如何引起的?如何解决?
答案 0 :(得分:0)
这是因为您(重新)在<ui:repeat value>
后面的getter方法中创建列表。在每轮迭代期间调用此方法。因此,每次下一次迭代都将基本上废弃上一次迭代期间设置的值。在action方法中,最终得到在上一轮迭代期间创建的列表。这就是为什么最后一个条目似乎工作正常。
这种做法确实绝对不对。您根本不应该在getter方法中执行业务逻辑。使列表成为属性,并在bean(post)构造期间仅填充一次。
@ManagedBean(name = "genproducts")
@ViewScoped
public class Genproducts{
private List<Product> list;
@PostConstruct
public void init() throws SQLException {
list = new ArrayList<>();
// ...
}
public List<Product> getList() {
return list;
}
}
哪个被引用为
<ui:repeat value="#{genproducts.list}" var="itemsBuying">