2013-01-04 33 views
1

我無法從View中的bean中查看範圍內的表中選擇的值。 以下代碼不起作用,但在我使用會話或請求範圍時起作用。@ViewScope不能與primefaces一起工作<p:ajax>

這裏是我的JSF頁面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:c="http://java.sun.com/jsp/jstl/core" 
    xmlns:p="http://primefaces.org/ui"> 
<f:view> 
    <h:head> 
     <title>Sample JSF/Prime Page</title> 
    </h:head> 
    <h:body> 
     <h:form id="primeForm"> 
      <p:panel id="toggle1" header="Panel 1" collapsed="#{prime.toggle1}" footer=" footer Info if required " toggleable="true" closable="true" > 
       <p:dataTable id="cars" value="#{prime.listModel}" var="data" paginator="true" style="width:500px" 
          selection="#{prime.selected}" selectionMode="single"> 
        <p:ajax event="rowSelect" listener="#{prime.onRowSelect}" /> 

        <f:facet name="header"> 
         Select a row to display a message 
        </f:facet> 
        <p:column headerText="Model"> 
         #{data.number} 
        </p:column> 
        <p:column headerText="Model"> 
         #{data.number} 
        </p:column> 
       </p:dataTable> 
      </p:panel> 
     </h:form>   
    </h:body> 
</f:view> 
</html> 

這裏是我的豆:

@ManagedBean 
@ViewScoped 
public class Prime implements Serializable { 

    ArrayList<UIData> list = new ArrayList<UIData>(); 
    private UIData selected; 
    private UIDataModel listModel; 
    private String testVaue; 
    private ArrayList<String> tmp = new ArrayList<String>(); 
    private HashMap<String, List<String>> pagesMap = new HashMap<String, List<String>>(); 
    private boolean toggle1 = true; 

    public Prime() { 
     for (int k = 1; k < 3; k++) { 
      UIData model =new UIData(""+k, ""+k); 
      list.add(model); 
     } 

     listModel = new UIDataModel(list); 
    } 

    public void onRowSelect(SelectEvent event) { 
     try{ 
      System.out.println("Sellected Value : "+((UIData)event.getObject()).getNumber()); 
     }catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    // Getters and setters. 
} 

回答

1

添加適當rowKey屬性數據表。 Primefaces必須有一種方法來唯一標識您的行。這就是爲什麼你應該設置一個屬性,這對你的數據集是唯一的。通常這是數據庫主鍵。在你的情況下,例如它可以是rowKey=#{data.number}

相關問題