我想遍历一个元素列表,并为每个要显示表单的元素进行迭代。在那种形式中,我希望能够为循环的每个元素填充不同的bean。这是我到目前为止所得到的,但当然它不起作用;)
<ui:repeat value="#{productBean.productPositions}" var="position">
<div>position info here</div>
<div>list price ranges</div>
<div>
<h5>Create new price range for product position position</h5>
<h:form>
Min:
<h:inputText
value="#{priceRangeBean.priceRanges[productPositionRangeSearch.productPositions.indexOf(position)].min}" />
Max:
<h:inputText
value="#{priceRangeBean.priceRanges[productPositionRangeSearch.productPositions.indexOf(position)].max}" />
price:
<h:inputText
value="#{priceRangeBean.priceRanges[productPositionRangeSearch.productPositions.indexOf(position)].price}" />
<h:commandButton value="create"
action="#{priceRangeController.createRange(productPositionRangeSearch.productPositions.indexOf(position))}" />
</h:form>
</div>
</ui:repeat>
我的PriceRangeBean:
@SessionScope
public class PriceRangeBean {
private List<PriceRange> priceRanges = new ArrayList<PriceRange>();
public List<PriceRange> getPriceRanges() {
return priceRanges;
}
public void setPriceRanges(List<PriceRange> priceRanges) {
this.priceRanges = priceRanges;
}
}
PriceRange
是POJO,其中包含最小,最高,价格为String
调用该页面的控制器使用PriceRangeBean
填充PriceRange
和ProductPosition
一样PriceRange
,以便列表中有一个“新”{{1}}对象准备好了。但是输入似乎没有到达支持bean。
任何想法我做错了什么?
谢谢!
答案 0 :(得分:1)
我认为你不能在value
的{{1}}属性中使用这种EL表达式。
表达式:
<h:inputText
(至少)评估两次。 一旦需要在“应用请求值”中设置该值。并且第二次处于“渲染响应阶段”。
当设置了值时(在应用请求值阶段),EL将表达式评估为 value="#{priceRangeBean.priceRanges[productPositionRangeSearch.productPositions.indexOf(position)].min}"
,并且似乎具有有限的功能。
来自Spec (JavaServer Pages 2.1 Expression Language Specification):
左值只能由单个变量(例如$ {name})或a组成 财产决议。
您可能需要查看同一规范中的1.2.1.1部分。