我遇到RichFaces问题并创建链接列表。如果您尝试在列表中使用任何类型的commandLink(我尝试过ui:repeat和rich:list),则不会调用该链接上的操作。我也试过了commandButton和那些的a4j变种。我在Jboss 6上使用JSF 2,RichFaces 4。
<rich:list var="venue" value="#{searchManager.results}" type="definitions" stateVar="status">
<h:form>
<h:commandLink value="CLICK IT" immediate="true" action="#{score.selectVenue}" />
</h:form>
</rich:list>
表格的位置也无关紧要。
<h:form>
<rich:list var="venue" value="#{searchManager.results}" type="definitions" stateVar="status">
<h:commandLink value="CLICK IT" immediate="true" action="#{score.selectVenue}" />
</rich:list>
</h:form>
如果我只是自己拥有链接(没有列表),那就可以了。
非常感谢任何帮助。
答案 0 :(得分:1)
当您单击命令链接或按下命令按钮提交表单时,JSF将在应用请求值期间相位扫描组件树以查找相关命令链接/按钮,以便它可以找到与其关联的操作表达式,在您的情况下#{score.selectVenue}
。
但是,为了能够达到这一目标,您需要确保#{searchManager.results}
返回与显示表单时完全相同的列表。因为使用空结果列表,在表单提交的应用请求值阶段,视图中根本没有命令链接/按钮。
您的#{searchManager}
bean似乎是请求作用域。请求范围的bean的生命周期恰好是一个请求 - 响应周期。因此,当您提交表单时,您将获得请求范围bean的全新和另一个实例,而不是显示表单时的实例。在{post}构造bean期间似乎不保留results
属性,因此保持为空。因此JSF无法找到有问题的命令链接/按钮,因此找不到与之关联的动作表达式,因此无法调用它。
当您使用JSF2时,一个简单的解决方法是将bean放在视图范围内。这样,只要您通过在操作方法中返回null
或void
来提交和导航到完全相同的视图,bean就会生效。
@ManagedBean
@ViewScoped
public class SearchManager {
// ...
}