为什么EL给我错误的对象作为括号之间的参数?

时间:2009-05-15 14:12:19

标签: jsf seam richfaces el ajax4jsf

情况如下:

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

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

这没有问题。

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

有什么想法吗?

谢谢Zack在5分钟内给我正确的解决方案。

我认为在括号之间的动作中传递参数更优雅,但是,嘿:这是有效的。 :)

非常感谢你。

P.S。我也在编辑标题。

4 个答案:

答案 0 :(得分:2)

尝试使用:

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

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

作为旁注,这不是jboss EL,它是统一表达语言(EL)。它只是JSP / JSF的一个特性,正如Sun所指定的那样。

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

例如。

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

答案 3 :(得分:0)

将dataTable放在<a4j:region>为我工作。这样,您仍然可以使用JBoss EL参数。