2010-06-09 137 views
3

在JSF中,如何在不使用託管bean的情況下將參數從一個頁面傳遞到另一個頁面?JSF將參數傳遞給另一頁

例如

<h:dataTable value="#{myObjects}" var="object"> 
<h:column>    
     <h:commandButton value="View Object" action="view-object"/> 
</h:column>            
</h:dataTable> 

我要傳遞的對象,這樣的下一個頁面,我可以簡單地做#{} object.displayValue

Thxs。

回答

5

首先,如果不使用託管bean,則無法執行此操作。

的最好的辦法是使用DataModel作爲h:dataTable,這樣就可以通過檢索DataModel#getRowData()當前選擇行對象的value。您只需確保該Bean在後續請求中保留相同的模型。換句話說,在bean的構造函數中填充模型。

<h:form> 
    <h:dataTable value="#{bean.model}" var="item"> 
     <h:column>    
      <h:commandButton value="View Object" action="#{bean.view}"/> 
     </h:column>            
    </h:dataTable> 
</h:form> 

與請求(或會話)範圍的bean看起來像這樣:

public class Bean { 

    private DataModel model; 
    private Item item; 

    public Bean() { 
     List<Item> list = new ArrayList<Item>(); 
     list.add(new Item(1, "value1")); 
     list.add(new Item(2, "value2")); 
     list.add(new Item(3, "value3")); 
     model = new ListDataModel(list); 
    } 

    public String view() { 
     item = (Item) model.getRowData(); 
     return "view"; 
    } 

    public DataModel getModel() { 
     return model; 
    } 

    public Item getItem() { 
     return item; 
    } 

} 

我假設你正在使用JSF 1.x和2.x的不還的,否則,@ViewScoped豆是better

而且在接下來的頁面:

<p>#{bean.item.value}</p> 
+0

設置我的dataTable這樣,使用JSF2.0,GlassFish的3.0.1和ViewScoped豆。當我導航到我的顯示頁面時,什麼也沒有顯示。看起來,當我用dataTable離開頁面時,所有的變量都超出了範圍。 – Sean 2011-01-21 20:22:36