循环中每个项目的JSF唯一输入bean

时间:2012-05-25 08:38:08

标签: java jsf jsf-2

我想遍历一个元素列表,并为每个要显示表单的元素进行迭代。在那种形式中,我希望能够为循环的每个元素填充不同的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填充PriceRangeProductPosition一样PriceRange,以便列表中有一个“新”{{1}}对象准备好了。但是输入似乎没有到达支持bean。

任何想法我做错了什么?

谢谢!

1 个答案:

答案 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部分。