如何使用EL 2.2方法表达式将动态参数传递给后台bean



我试图通过一个动态参数从我的后台bean中的JSF 2.0页面调用一个函数。只要我传递一个静态字符串,它就可以正常工作,但是当我尝试使用一个动态字符串时,我总是得到一个EL解析错误。我猜这是一个语法问题,但我想不出另一种方法来做到这一点,使用方法表达式。我知道我可以用<f:param..../>标签做到这一点,但我不打算放弃这个:)

<h:dataTable  var="urlresult" value="#{search.searchResults_sites_urls}">
    <h:column>
        <h:form>
            <h:outputText value="#{urlresult}" />
            <h:commandLink action="#{search.showUrls(#{urlresult})}" value=" x" />
        </h:form>
    </h:column>
</h:dataTable>

后台bean中的方法:

public void showUrls(String url) {
    //CODE
}

这是如何引起的,我该如何解决?

嵌套EL表达式#{}是非法的。只需删除嵌套表达式。

<h:commandLink action="#{search.showUrls(urlresult)}" value=" x" />

同样,当你在<h:dataTable>中使用它时,为了让它正常工作,确保#{search} bean在视图范围内,或者如果它真的需要被请求作用域,请确保在bean初始化期间保留#{search.searchResults_sites_urls}

参见:

  • 我怎么能通过选定的行commandLink内dataTable?