1

我想遍历元素列表,并为每个元素显示一个表单。在那种形式中,我希望能够为循环的每个元素填充一个不同的 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;
    }

}

作为一个 POJO包含PriceRangemin, max, price asString

调用页面的控制器PriceRangeBean用尽可能多PriceRange的 s填充ProductPositions,以便列表中有一个“新”PriceRange对象可以创建。然而,输入似乎没有到达支持 bean。

任何想法我做错了什么?

谢谢!

4

1 回答 1

1

我认为你不能value<h:inputText.

表达方式:

 value="#{priceRangeBean.priceRanges[productPositionRangeSearch.productPositions.indexOf(position)].min}"

(至少)被评估了两次。一旦需要在“应用请求值”中设置该值。第二次是在“渲染响应阶段”。

当值被设置时(在应用请求值阶段),表达式被 EL 评估为 anlvalue并且似乎具有有限的功能。

来自规范(JavaServer Pages 2.1 Expression Language Specification)

左值只能由单个变量(例如 ${name})或属性解析组成。

您可能想查看同一规范中的第 1.2.1.1 节。

于 2012-05-25T10:19:48.393 回答