将url param传递给backing bean方法

时间:2012-12-27 19:28:23

标签: jsf-2

我的Facelet中有以下代码:

<ui:composition template="/templates/mastertemplate.xhtml">
    <ui:define name="pageTitle">
        <h:outputFormat value="#{msgs.productPageTitle}">
            <f:param value="#{param.productName}"/>
        </h:outputFormat>
    </ui:define>
    <ui:param name="categoryName" value="#{param.categoryName}"/>

    <ui:define name="content">
        <p>#{param.productName}</p>
        <h:form>
            <h:commandLink action="#{cartBean.addItemToCart(param.productName)}">
                <f:ajax event="action" render=":cart :cartPrice" />
                <h:graphicImage value="resources/img/addToCart.gif"/>
            </h:commandLink>
        </h:form>
    </ui:define>
</ui:composition>

它应该打印#{param.productName}cartBean期望String作为addItemToCart方法的参数(我知道这很糟糕,但不是我的选择)。我在我的cartBean中设置了一个记录器,它告诉我参数没有通过,它是空的。

如果我执行以下操作:

<h:commandLink action="#{cartBean.addItemToCart('someProductName')}">
    <f:ajax event="action" render=":cart :cartPrice" />
    <h:graphicImage value="resources/img/addToCart.gif"/>
</h:commandLink>

我用#{param.productName}替换字符串文字,它工作正常。为什么我不能将param值作为参数传递?我得到一个EvaluationException,这解释了为什么我的记录器看到一个空字符串,但我不明白我应该怎么做。

1 个答案:

答案 0 :(得分:0)

不确定是否可能这样,但至少它似乎是不好的做法。您不需要任何验证/转换选项就可以将字符串插入到后退中。

我找到了一个教程,解释了如何使其工作here