多次调用JSF commandButton操作
我的JSF页面有问题 程序:用户可以通过输入表单来搜索比萨饼。过滤搜索是可能的,因为用户可以决定是否搜索披萨名称、披萨id或其他指定条件。程序将生成一个SQL查询,返回pizza对象并将其存储到对象列表中。JSF页面通过ui:repeat标记迭代显示pizza对象的列表。将显示比萨饼名称、比萨饼ID、显示为单选按钮的可用尺寸以及可能的数量列表。对于每个显示的比萨饼对象,都有一个“添加到购物车”按钮,用于根据所选大小和数量的参数化值将比萨饼添加到购物车 问题是:几乎所有内容都显示正确。但是,当要将比萨饼添加到购物车时,就会出现错误。如果用户决定要比萨饼,请选择比萨饼的大小和数量,然后单击比萨饼的命令按钮“添加到购物车”。调用addToCart方法,只返回提交的参数pizzaID、chosenSize、chosenQuantity。但不知何故,该方法将被多次调用 JSF页面: bean Pizza搜索: 豆馅饼的结果是: 正如我在之前的问题中所写的,我已经使用了ui:repeat标记,但多次调用的问题并未出现。但是我必须找到另一个解决方案来迭代我的pizza对象列表,这就是为什么我使用c:forEach。我也不想从Majorra变成MyFaces多次调用JSF commandButton操作,jsf,foreach,javabeans,Jsf,Foreach,Javabeans,我的JSF页面有问题 程序:用户可以通过输入表单来搜索比萨饼。过滤搜索是可能的,因为用户可以决定是否搜索披萨名称、披萨id或其他指定条件。程序将生成一个SQL查询,返回pizza对象并将其存储到对象列表中。JSF页面通过ui:repeat标记迭代显示pizza对象的列表。将显示比萨饼名称、比萨饼ID、显示为单选按钮的可用尺寸以及可能的数量列表。对于每个显示的比萨饼对象,都有一个“添加到购物车”按钮,用于根据所选大小和数量的参数化值将比萨饼添加到购物车 问题是:几乎所有内容都显示正确。但是,当要将
我希望你能帮助我。谢谢 h:form标记应该在c:forEach之外。尝试使用ui:repeat和f:setPropertyActionListener来设置选定的pizza。如果我将h:form移到外部,将抛出错误。这不是我想要的。我真的想为每个显示的比萨饼添加一个购物车按钮。正如我已经提到的,ui:repeat在Majorra下有一个bug,所以我不能使用ui:repeat。看到什么错误了吗?有重复id的东西?没错。有一个错误告诉我某些ID已被使用。请尝试将varStatus=status添加到c:forEach。而不是在id的附加索引中,例如id=chosenQuantity_{status.index}
<c:forEach var="result" items="#{pizzaResults.results}">
<h:form>
<ul>
<li><p>Name: #{result.pizza.name}</p></li>
<li><p>ID: #{result.pizza.pizzaID}</p></li>
<li>
<p>Toppings:</p>
<ui:repeat var="topping" value="#{result.toppingList}">
<p>#{topping.toppingName}</p>
</ui:repeat>
</li>
<li>
<p>Sizes:</p>
<h:selectOneRadio id="chosenSize" value="#{pizzaResult.chosenSize}">
<f:selectItems value="#{result.sizeList} var="size" itemLabel="#{size.diameter}" itemValue="#{size.sizeID}"/>
</h:selectOneRadio>
</li>
<li>
<p>Quantity:</p>
<h:selectOneListbox id="chosenQuantity" value="#{pizzaResult.chosenQuantity}" size="1">
<f:selectItem id="quantity1" itemLabel="1x" itemValue="1">
<f:selectItem id="quantity2" itemLabel="2x" itemValue="2">
</h:selectOneListbox>
</li>
<li>
<h:commandButton value="add to cart" action="#{pizzaResult.addToCart(result.pizza.pizzaID)}"/>
</li>
</ul>
</h:form>
</c:forEach>
@ManagedBean
@SessionScoped
public class PizzaSearch {
// variables in order to submit the search criteria
private List<PizzaObject> results = new ArrayList<PizzaObject>();
// methods to generate the search
// each search result will fill/replace the list of pizza objects 'results'
// getter and setter methods, just like
public List<PizzaObject> getResults() {
return results;
}
}
@ManagedBean
@SessionScoped
public class PizzaResult {
// injection of PizzaSearch
@ManagedProperty(value="#{pizzaSearch}")
private PizzaSearch pizzaSearch;
// variables
private List<PizzaObject> results;
private int _chosenSize;
private int _chosenQuantity;
@PostConstruct
public void initResults() {
this.results = pizzaSearch.getResults();
}
// this method is being invoked multiple times
// method to add the pizza object to the cart
public void addToCart(int chosenPizzaID) {
System.out.println("chosen pizza ID: " + chosenPizzaID);
System.out.println("chosen size: " + _chosenSize);
System.out.println("chosen quantity: " + _chosenQuantity);
}
// getter and setter methods
}