0

Hi i created one dataTable using Primefaces,and i created link to the name column of the dataTable. Now it should move on the next page and display its selected row contents in the next page once i click on the name link but i am getting the following error:

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> 
Vidya
  • 51
  • 2
  • 9

1 Answers1

2

Well you gave name to your bean order with @ManagedBean(name="order"), so you can access it with #{order}. Change orderBean to order. Also I saw that you made misteke in this EL also #{orderBean.onRowSelectNavigate}.

Soo:

#{order.selectedOrder}

and

#{order.onRowSelectNavigate}

should do the job.

partlov
  • 13,002
  • 6
  • 59
  • 76
  • Your `OrderBean` is a class name, but `order` is the name how you will access those beans in expressions of EL. These are no two beans. First is name of your class (type) second is the name of instance you are working with. – partlov Mar 06 '13 at 09:02
  • There is no editing, just change `orderBean.something` to `order.something`. Also as you are new you should [accept an answer](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) – partlov Mar 06 '13 at 09:28