h:ui中的表单:repeat不能按预期工作

时间:2014-01-30 16:56:54

标签: jsf-2.2

对于一个庞大的项目,我需要在网页上构建多个表单。不能详细说明,但假设有一个表格列表的请求结构;使用mojarra jsf 2.2.5

给定Managed Bean:

@ManagedBean
@SessionScoped
public class Debug {
  private final List<DebugBean> list;

  public Debug() {
    super();
    this.list = new ArrayList<DebugBean>();
    this.list.add(new DebugBean("label 1", "value 1"));
    this.list.add(new DebugBean("label 2", "value 2"));
  }

  public String submit() {
    LOGGER.info("list = " + this.list.toString());
    return "";
  }

  public List<DebugBean> getList() {
    return this.list;
  }
}

bean DebugBean很简单,只包含两个变量label和value,包括String,以及它的setter和getter。

现在是xhtml页面:

<h:body style="height: 100%">
  <ui:repeat value="#{debug.list}" var="x">
    <h:form>
      <h:panelGrid columns="2">
        <h:outputText value="#{x.label}" />
        <h:inputTextarea value="#{x.value}" />
      </h:panelGrid>
      <h:commandButton action="#{debug.submit}" value="ok" />
    </h:form>
  </ui:repeat>
</h:body>

问题在于更改第一个值。当我更改第二个时,记录器会按预期为我提供新值。但更改第一个,记录器给了我旧的列表,好像我会重新加载完整的表单而不做任何更改。这里有什么问题,更重要的是:我能做些什么才能让它发挥作用?

1 个答案:

答案 0 :(得分:0)

解决方案很简单,但更糟。我不知道为什么,但是ui:repeat不像h:dataTable那样表现。所以替换ui:重复h:dataTable解决问题,但意味着页面布局返工(这是一个更大的问题,但可以由我完成)。