我想遍历元素列表,并想为每个元素显示一个表单。以这种形式,我希望能够填充对于循环的每个元素都不同的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
是包含最小,最大,价格为String
的POJO调用页面的控制器用与
PriceRangeBean
一样多的PriceRange
填充ProductPosition
,以便在列表中准备创建一个“新” PriceRange
对象。但是,输入似乎没有到达支持bean。有什么想法我做错了吗?
谢谢!
最佳答案
我认为您不能对value
中的<h:inputText
属性使用这种EL表达式。
表达方式:
value="#{priceRangeBean.priceRanges[productPositionRangeSearch.productPositions.indexOf(position)].min}"
被(至少)评估两次。
需要在“应用请求值”中设置值时一次。并第二次进入“渲染响应阶段”。
设置该值时(在“申请请求值”阶段),该表达式由EL评估为
lvalue
,并且功能似乎有限。从规范(JavaServer Pages 2.1 Expression Language Specification):
左值只能由单个变量(例如$ {name})或
属性解析。
您可能想查看同一规范中的1.2.1.1节。