【问题标题】:Why EL gives me the wrong object as parameter between parenthesis?为什么 EL 给了我错误的对象作为括号之间的参数?
【发布时间】:2010-10-26 12:24:39
【问题描述】:

情况如下:

在 a4j:form 中的 rich:dataTable 中,我创建了一个 a4j:commandLink 来选择值并使用 jboss el 操作语法将其传递给 bean

action="#{bean.myaction(myparameter)}"

这没有问题。

但是如果我重新渲染表单以使用 ajax 调用过滤数据表,当我选择值时,它会给我错误的结果:选择的索引,但过滤前的数据。

有什么想法吗?

感谢 Zack 在 5 分钟内为我提供了正确的解决方案。

我认为在括号之间的操作中传递参数更优雅,但是,嘿:这行得通。 :)

非常感谢。

附:我也在编辑标题。

【问题讨论】:

    标签: jsf seam richfaces el ajax4jsf


    【解决方案1】:

    尝试使用:

    <a4j:commandLink action="#{bean.myaction}">
        <f:param name="myparameter" value="paramValue" />
    </a4j:commandLink>
    

    然后通过requestParameter("myparameter")FacesContext 在您的操作中访问该参数。

    附带说明,这不是 jboss EL,而是统一表达语言 (EL)。这只是 Sun 指定的一般 JSP/JSF 的一个特性。

    【讨论】:

      【解决方案2】:

      除了 Zack 的回答,我想说如果你需要扩展 EL 表达式以便能够调用带参数的方法,你可以使用EL Functors 库:

      action="#{bean.myaction$[myparameter].action}"
      

      【讨论】:

      • 他正在使用 JBoss EL。你可以做 #{bean.myaction(myparameter)} 就好了。
      【解决方案3】:

      您的数据表是否使用带有 @DataModel 注释的 Collection 填充?如果是这样,请尝试在过滤时将其从上下文中删除,以便重新请求它。

      例如。

      //In filter method
      Contexts.removeFromAllContexts("yourDataModelCollection");
      

      【讨论】:

      • 谢谢,但我没有使用数据模型。我正在使用接缝实体查询框架。
      【解决方案4】:

      将 dataTable 放入 &lt;a4j:region&gt; 对我有用。这样,您仍然可以使用 JBoss EL 参数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-15
        • 2015-10-28
        • 2013-07-10
        • 2023-03-23
        • 2016-07-06
        • 2012-12-06
        • 1970-01-01
        • 2021-12-21
        相关资源
        最近更新 更多