h:commandLink在列表中不起作用

时间:2011-07-27 13:08:39

标签: java jboss jsf-2 richfaces commandlink

我遇到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>

如果我只是自己拥有链接(没有列表),那就可以了。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

当您单击命令链接或按下命令按钮提交表单时,JSF将在应用请求值期间相位扫描组件树以查找相关命令链接/按钮,以便它可以找到与其关联的操作表达式,在您的情况下#{score.selectVenue}

但是,为了能够达到这一目标,您需要确保#{searchManager.results}返回与显示表单时完全相同的列表。因为使用空结果列表,在表单提交的应用请求值阶段,视图中根本没有命令链接/按钮。

您的#{searchManager} bean似乎是请求作用域。请求范围的bean的生命周期恰好是一个请求 - 响应周期。因此,当您提交表单时,您将获得请求范围bean的全新和另一个实例,而不是显示表单时的实例。在{post}构造bean期间似乎不保留results属性,因此保持为空。因此JSF无法找到有问题的命令链接/按钮,因此找不到与之关联的动作表达式,因此无法调用它。

当您使用JSF2时,一个简单的解决方法是将bean放在视图范围内。这样,只要您通过在操作方法中返回nullvoid来提交和导航到完全相同的视图,bean就会生效。

@ManagedBean
@ViewScoped
public class SearchManager {
    // ...
}

另见: