2013-03-06 55 views
0

嗨,我使用Primefaces創建了一個dataTable,並且我創建了指向dataTable的名稱列的鏈接。現在,應該在下一個頁面上移動,一旦我的名字點擊下頁顯示其選定行的內容,但我收到以下錯誤:目標無法訪問,標識符'OrderBean'已解析爲空

javax.el.PropertyNotFoundException: /view.xhtml at line 50 and column 81 target="#{OrderBean.selectedOrder}": Target Unreachable, identifier 'OrderBean' resolved to null 
    at org.apache.myfaces.view.facelets.el.TagValueExpression.setValue(TagValueExpression.java:121) at org.apache.myfaces.view.facelets.tag.jsf.core.SetPropertyActionListenerHandler$SetPropertyListener.processAction(SetPropertyActionListenerHandler.java:110) at javax.faces.event.ActionEvent.processListener(ActionEvent.java:51) 
     at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:344) 
     at javax.faces.component.UICommand.broadcast(UICommand.java:103) 
     at javax.faces.component.UIData.broadcast(UIData.java:761) 
     at javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:973) 
     at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:275) 
     at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1285) 
     at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:711) 
     at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:34) 
     at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:171) 
    when i click on the link. Can anyone plz help me resolve this error out.check whether i made any mistake in the setpropertyaction Listener ??? 
    if so plz post the correct code. I am waiting the answers please help me to clear the error using jas 2.0 and primefaces. 

view.xhtml

<p:dataTable id="dataTable" var="v" value="#{order.orderList}" paginator="true" rows="3" paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
       rowKey="#{order.year}" rowsPerPageTemplate="6,9"> 

    <f:facet name="header"> 
     Data Table 
    </f:facet> 

    <p:column> 
     <f:facet name="header"> 
      <h:outputText value="Name" /> 

     </f:facet> 
      <p:commandLink value="#{v.name}" action="/nextpage.xhtml?faces-redirect=true" rowSelectListener="#{orderBean.onRowSelectNavigate}" > 
<f:setPropertyActionListener value="#{v}" target="#{orderBean.selectedOrder}"/> 

</p:commandLink> 


    </p:column> 

    <p:column> 
     <f:facet name="header"> 
     <h:outputText value="Year" /> 
     </f:facet> 
     <h:outputText value="#{v.year}" /> 
    </p:column> 
    ----------</p:datatable> 

OrderBean.java

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.Arrays; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 
import javax.faces.bean.ViewScoped; 
import javax.faces.context.FacesContext; 

import org.primefaces.event.SelectEvent; 

@ManagedBean(name="order") 
@SessionScoped 
@ViewScoped 

public class OrderBean implements Serializable{ 


    private static final long serialVersionUID = 1L; 
    String name; 
    int year; 
    String company; 
    String number; 
    private Order selectedOrder; 

    public Order getSelectedOrder() { 
     return selectedOrder; 
    } 
    public void setSelectedOrder(Order selectedOrder) { 
     this.selectedOrder = selectedOrder; 
    } 
    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getYear() { 
     return year; 
    } 

    public void setYear(int year) { 
     this.year = year; 
    } 

    public String getCompany() { 
     return company; 
    } 

    public void setCompany(String company) { 
     this.company = company; 
    } 

    public String getNumber() { 
     return number; 
    } 

    public void setNumber(String number) { 
     this.number = number; 
    } 

    private static final ArrayList<Order> orderList = 
     new ArrayList<Order>(Arrays.asList(

     new Order("vidhya",2020,"IT","1"), 
     new Order("madhu",1021,"BT", "2"), 
     new Order("manu",3846,"Mech","3"), 
     new Order("shruthi",5647,"Benz","4") 

    )); 

    public ArrayList<Order> getOrderList() { 

     return orderList; 

    } 

    public String addAction() { 

     Order order = new Order(this.name, this.year, 
      this.company, this.number); 

     orderList.add(order); 

     return null; 
    } 



    public static class Order{ 

     String name; 
     int year; 
     String company; 
     String number; 



     public Order(String name, int year, 
       String company, String number) { 
      this.name = name; 
      this.year = year; 
      this.company = company; 
      this.number = number; 
     } 

     public String getName() { 
      return name; 
     } 
     public void setName(String name) { 
      this.name = name; 
     } 
     public int getYear() { 
      return year; 
     } 
     public void setYear(int year) { 
      this.year = year; 
     } 
     public String getCompany() { 
      return company; 
     } 
     public void setCompany(String company) { 
      this.company = company; 
     } 
     public String getNumber() { 
      return number; 
     } 
     public void setNumber(String number) { 
      this.number = number; 
     } 

     public String moveToNextPage(){ 
      return "nextpage"; 
     } 
     public String onRowSelectNavigate(SelectEvent event) { 
       FacesContext.getCurrentInstance().getExternalContext().getFlash().put("selectedOrder", event.getObject()); 
       return "nextpage?faces-redirect=true"; 
      } 

nextpage.xhtml

<h:panelGrid id="display" columns="2" cellpadding="4" > 
     <f:facet name="header"> 
     details 
     </f:facet> 
     <h:outputText value="Name:" /> 
     <h:outputText value="#{orderBean.selectedOrder.name}" /> 

     <h:outputText value="Year:" /> 
     <h:outputText value="#{orderBean.selectedOrder.year}" /> 

     <h:outputText value="Company:" /> 
     <h:outputText value="#{orderBean.selectedOrder.company}" /> 

     <h:outputText value="Number:" /> 
     <h:outputText value="#{orderBean.selectedOrder.number}" />  
    </h:panelGrid> 
+0

您應該只使用一個作用域並將名稱修復爲@partlov提到 – Jaider 2013-08-12 22:45:53

回答

2

那麼你給的名字你的bean order@ManagedBean(name="order"),這樣你就可以#{order}訪問它。將orderBean更改爲order。我還看到你在這個EL中也做過錯誤,也是#{orderBean.onRowSelectNavigate}

洙:

#{order.selectedOrder} 

#{order.onRowSelectNavigate} 

應該做的工作。

+0

您的'OrderBean'是一個類名,但'order'是您如何在EL表達式中訪問這些bean的名稱。這些不是兩個豆子。首先是您的班級名稱(類型),其次是您正在使用的實例的名稱。 – partlov 2013-03-06 09:02:54

+0

沒有編輯,只需將'orderBean.something'更改爲'order.something'。此外,當你是新的你應該[接受一個答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) – partlov 2013-03-06 09:28:46

相關問題