为rich添加一行:datatable手动输入文本

时间:2013-12-15 08:15:20

标签: jsf richfaces

我想在我的rich的末尾添加一行:显示信息的数据表 在这一行中,我想提供一些输入,使用户能够添加新数据 我读到了这个答案: RICH:dataTable - add new row 但对我来说有点不同 我没有任何清单

我的xhtml是这样的:

<rich:dataTable value="#{serverMB.allServer}" var="servers1" iterationStatusVar="it"  id="table" rows="15"
            style="direction: rtl ; text-align: right">
<rich:column>
    <f:facet name="header">#</f:facet>
    #{it.index+1}
</rich:column>
<f:facet name="header">
    <h:outputText value="#{msgs.servers}"/>
</f:facet>
<rich:column filterValue="#{serverMB.serverNameFilter}"
             filterExpression="#{fn:containsIgnoreCase(servers1.server_name,serverMB.serverNameFilter )}">
    <f:facet name="header">
        <h:outputText value="#{msgs.server_name}"/>
        <h:inputText value="#{serverMB.serverNameFilter}">
            <a4j:ajax event="blur" render="table" execute="@this"/>

        </h:inputText>
    </f:facet>
    <h:outputText value="#{servers1.server_name}"/>

</rich:column>
.
.
.

我的托管bean就像这样

  public List<Server> getAllServer() {

    return serverFacade.findAll();
}

我使用此方法显示信息,因此没有任何列表,我个人可以添加一行,依此类推...... 所以我必须做什么?

1 个答案:

答案 0 :(得分:1)

  1. 应填充serverList并将其设置为类级变量。使用@PostConstruct方法填充列表:

    @PostConstruct
    public void initServerList(){
      //declare serverList as a class-scoped variable in your managed bean 
      serverList = serverFacade.findAll();
    }
    
  2. 在托管bean中声明一个将添加到serverList

    的方法
    public void incrementList(){
    
       Server server = new Server(); //create a dummy Server object
       serverList.add(server); // List has been incremented. Be sure to AJAX-refresh the datatable after calling this method to reflect the new row.
    }
    
  3. 从JSF视图中收集信息,然后用它来填充虚拟对象的字段:

    public void updateLatestServer(){
    
       Server lastServer = serverList.get(serverList.size-1);
       lastServer.setName(serverNameFromView);     
       lastServer.setIP(IPFromView); 
    }
    

    serverNameFromViewIPFromView是您将在JSF表单中收集的假设变量。