【问题标题】:Data Table values not added properly in ViewScope在 ViewScope 中未正确添加数据表值
【发布时间】:2012-10-29 14:35:14
【问题描述】:

表格和表格在同一页面上。当用户添加表单详细信息并单击添加时,应将数据复制到表中。

当用户第二次输入详细信息并单击添加时(表中已经存在数据),第一个值被新值覆盖,列表中的下一个为空。

我们如何在表格上显示这两个值。

名称.xhtml

<h:form>
  <h:inputText value="#{bean.fName}"/>
  <h:inputText value="#{bean.lName}"/>

   <h:dataTable value="#{bean.list}" var="name">
     <h:column>
       <h:outputText value="#{name.fName}">
     </h:column> 
   </h:dataTable>
   <h:commandLink action="#{bean.add}"/>
 </h:form>

Bean.java //Bean类是ViewScoped

@ManagedProperty(value="#{buyerTO}") 受保护的买家对买家TO;

列出买家TOList = new ArrayList(); // BuyerTO 在 ViewScope 中

public String addBuyer(){
 buyerTOList.add(buyerTO);
 buyerTO = new BuyerTO();
 return "";

}

【问题讨论】:

    标签: jsf-2 datatable


    【解决方案1】:

    您将通过返回非null/void 来结束视图范围。您需要返回nullvoid 以保留后续请求的视图范围。

    替换

    return "";
    

    通过

    return null;
    

    public void addBuyer() {
        // ...
        // No return statement.
    }
    

    【讨论】:

    • 返回 null 并不能解决问题。每次在页面上单击按钮时都会创建一个新视图。
    • 显然您已将视图范围 bean 的属性绑定到在视图构建期间运行的某个标记/属性。但是,到目前为止在问题中发布的代码并未表明这一点。所以是其他地方造成的。有关详细背景信息,请访问此答案:stackoverflow.com/questions/3342984/…
    • h:dataTable 是我代码中的复合组件。看起来我们不能使用复合组件中的视图范围 bean。
    • 取决于它们是在视图构建时间还是视图渲染时间使用。您的问题表明它已在视图构建期间使用。
    猜你喜欢
    • 2011-09-24
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 2021-01-16
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    相关资源
    最近更新 更多