2017-06-09 47 views
0
<p:outputPanel id="panel"> 
<ui:repeat value="#{dataController.display()}" 
var="item" rendered="#{Bean.showtable}"> 
    <b:row> 
    <b:column col-md="5"> 
    <h:outputText value="#{item.name}" style="font-family: verdana;font-size:16px;margin-bottom:15px;"></h:outputText> 
    </b:column>  

    <b:column col-md="7"> 
    <h:inputText style="width:200px;height:30px;margin-bottom:15px;" 
          autocomplete="off"></h:inputText> 
    </b:column>       
    </b:row> 
    </ui:repeat> 

訪問值:重複JSF

在上面的代碼中,我使用UI:重複用於輸出在一個列表中顯示的項目名稱文本以及輸入文本用於輸入項目的

輸入文本取決於列表中的值,即動態生成。

我需要從輸入文本訪問值並將它們添加到List。

任何人都可以請建議我一種方法來訪問值從輸入文本到bean /列表儘管使用ui:重複一次顯示輸入文本?

我試圖創建一個空列表,並再次使用ui:只對輸入文本重複..試圖從輸入文本訪問值。但ui:重複不再工作..因爲它已經用於顯示一次。

我是新來的JSF.Any幫助將不勝感激。Thankyou。

回答

1

請勿使用空列表。用空值或空值初始化它。
假設我們有inputs作爲您的列表,您的應該看起來像這樣。

@Named 
@ViewScoped 
public class DataController implements Serializable { 

    private List<String> inputs; 

    // getters and setters 

    @PostConstruct 
    public void init() { 
     inputs = new ArrayList<String>(); 
    } 

    public List<Bean> getDisplay() { 
     List<Bean> display = new ArrayList<Bean>(); 

     // add values to display 

     for (int i = inputs.size(); i < display.size(); i++) { 
      inputs.add(""); 
     } 

     return display; 
    } 

    // for testing inputs 
    public void testInputs() { 
     for (String input : inputs) { 
      System.out.println(">>>>>" + input); 
     } 
    } 

} 

XHTML

<ui:repeat value="#{dataController.display()}" varStatus="idx" ...> 
    ... 
    <h:inputText value="#{dataController.inputs[idx.index]}" style="width:200px;height:30px;margin-bottom:15px;" autocomplete="off"></h:inputText> 
    ... 
</ui:repeat> 

<p:commandButton value="Test Inputs" action="#{dataController.testInputs}" update="@form" /> 

希望這有助於。

+0

非常感謝您的解決方案。 – Spandana

+0

但是** dataController.display()**是一種返回**列表 **的方法,我不能初始化init()中的顯示方法,因爲它需要在另一個方法調用之後調用。 – Spandana

+0

你可以告訴我,如果我可以使用嵌套的** UI:重複**或任何其他方法建議? – Spandana