JSF和richfaces:h:richfaces表中的commandlink无法正常工作

时间:2010-08-08 23:31:30

标签: jsf richfaces

在rich:dataTable中使用h:commandlink(或commandbutton)时,永远不会调用指定的操作,也不会实例化相应的托管bean(无论是在请求还是会话范围)...... 相反,执行相同的请求..(页面重新加载).. 已经看到在论坛上似乎是类似的问题,但实际上并不是我遇到的问题.. h:commandlink /按钮在rich:datatable ..

之外工作正常

有人有任何建议吗?

这是一段代码:

    

    <h:commandLink id="commLink" actionListener="#{hBean.test}" action="#{hBean.viewTranslation}">
        <h:outputText value="#{trans.translationName}"/>   
    </h:commandLink>
</rich:column>

3 个答案:

答案 0 :(得分:2)

bean显然是请求范围的,并且在bean构造期间没有加载数据模型(至少在后续请求的应用请求值阶段期间)。您需要为后续请求保留相同的数据模型,否则JSF无法找到与单击的链接关联的行项。最直接的方法是在bean的构造函数或@PostConstruct方法中加载datamodel。

快速修复/测试是将bean放入会话范围。然后,数据模型将保存在会话范围中,并在后续请求中可用。但这对用户体验有更大的影响(例如,当在同一会话中的不同浏览器窗口/标签中打开相同页面时出现意外结果)。如果您已经使用JSF 2.0(由于您使用的是RichFaces可能不是这种情况),那么新的视图范围将是 解决方案。

相关问题:

答案 1 :(得分:0)

感谢BalusC的回复。实际上在我的情况下事情并不那么简单,因为我使用spring和JSF一起使用我的dataList是在spring注释控制器中构造的,所以为了让它知道jsf支持bean我必须让bean知道spring和jsf ..您的回复虽然帮助我找到了解决方案 - 不仅我必须在spring和jsf之间共享我的bean,还需要制作会话范围的spring控制器..也许这不是一个很好的解决方案,但现在适用.. <登记/> 我没有在我的最新项目之前使用过jsf,并且不得不说我不满意它需要如此紧密地遵循它的架构 - 让它有些难以合并spring和jsf

答案 2 :(得分:0)

如果您使用的是RichFaces 3.0.0到3.3.3,请使用标记a4j:keepAlive。它甚至可以在请求范围内工作。