2

我对 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>

如果我只有链接本身(没有列表),它就可以工作。

任何帮助将不胜感激。

4

1 回答 1

1

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

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

您的#{searchManager}bean 似乎是请求范围的。请求范围的 bean 的生命周期正好是一个请求-响应周期。因此,当您提交表单时,您将获得一个全新的请求范围 bean 的另一个实例,而不是显示表单时的实例。results在 bean 的(后)构造过程中,该属性似乎没有被保留,因此保持为空。因此 JSF 无法找到相关的命令链接/按钮,因此无法找到与其关联的操作表达式,因此无法调用它。

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

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

也可以看看:

于 2011-07-27T14:29:40.970 回答