java - Primefaces DataTable+LazyDataModel won't pass setPropertyActionListener in request scope -


i have primefaces datatable based on lazydatamodel. managed load data in table not being able use setpropertyactionlistener show selected items in dialog nor edit rows. using request scope , noticed issue seems solved in session scope, rather use former (view scope won't load data in table). tried override getrowdata , getrowkey methods don't called. have none of issues when don't use lazy model approach.

could injection related issue missing or lazydatamodel won't work outside session scope?

public class lazydatamodelbase<t> extends lazydatamodel<t> {  private volatile abstractfacade<t> facade;  public lazydatamodelbase(abstractfacade<t> facade) {     super();     this.facade = facade; }  public final abstractfacade<t> getfacade() {     return facade; }  public final void setfacade(abstractfacade<t> facade) {     this.facade = facade; }  @override public list<t> load(int first, int pagesize, string sortfield,         sortorder sortorder, map<string, string> filters) {     list<t> list = facade.load(first, pagesize,             sortfield, sortorder, filters);     if (list == null) {         throw new runtimeexception("problem.");     }     // using following line debugging:     // throw new runtimeexception(list.tostring());     setrowcount(facade.count());     return list; } 

}

userlazydatamodel looks this

public class userlazydatamodel extends lazydatamodelbase<user> {      private userfacade facade;      public userlazydatamodel(userfacade facade) {         super(facade);     }      public list<user> getrowdata(string rowkey) {         return facade.findbyid(integer.parseint(rowkey)); // findbyid defined in userfacade     }      ... 

my backing bean looks this

@named(value = "usercontroller") @requestscoped public class usercontroller implements serializable {      private user current;     @ejb private userfacade ejbfacade; private lazydatamodelbase<user> items; private integer itemid; private int pagesize = 10;  public usercontroller() {     items = new userlazydatamodel(ejbfacade); }  public userfacade getuserfacade() {     return ejbfacade; }  public void setuserfacade(userfacade facade) {     this.ejbfacade = facade;     //items.setfacade(facade); }  public user getselected() {     if (current == null) {         this.current = new user();     }     return current; }  public void setselected(user selected) {     this.current = selected; }  public void setselected(integer id) {     this.itemid = id;     current = ejbfacade.find(id); }  public integer getitemid() {     return itemid; }  public void setitemid(integer id) {     this.itemid = id;     current = ejbfacade.findbyid(id); }  public int getpagesize() {     return pagesize; }  public void setpagesize(int pagesize) {     this.pagesize = pagesize; }  private void setdefaultstatus() {     current.setstatusid(ejbfacade.getdefaultstatus()); }  public string create() {     current.setdatecreated(new date());     if (current.getstatusid() == null) {         setdefaultstatus();     }     current.hashpassword();      try {         ejbfacade.create(current);         jsfutil.addsuccessmessage("user guardado exitosamente");         return "success-create";     } catch (exception e) {         jsfutil.adderrormessage(e, "a persistence error ocurred.");         return null;     } }  public string preparelist() {     //current = null;     return "index?faces-redirect=true"; }  public string preparecreate() {     return "create?faces-redirect=true"; }  public string prepareedit() {     return "edit"; }  public void onrowselect() {     current = ejbfacade.findbyid(itemid); }  public void update() {     try {         ejbfacade.edit(current);         jsfutil.addsuccessmessage("user guardado exitosamente");     } catch (exception e) {         jsfutil.adderrormessage(e, "a persistence error ocurred.");     } }  public void delete() {     try {         ejbfacade.remove(current);         current = null;         jsfutil.addsuccessmessage("role deleted");     } catch (exception e) {         jsfutil.adderrormessage(e, resourcebundle.getbundle("/bundle").getstring("persistenceerroroccured"));     } }  public lazydatamodelbase<user> getitems() {     items.setfacade(ejbfacade);     items.setpagesize(pagesize);     return items; }  public void setitems(lazydatamodelbase<user> model) {     this.items = model; } 

}

and view

    <h:form prependid="false">         <p:commandbutton immediate="true" style="margin: 10px 0;" value="nuevo" icon="ui-icon-plus" action="#{usercontroller.preparecreate}" ajax="false" />     </h:form>     <h:form id="listform">         <br />         <p:growl id="messages" showdetail="true"/>         <p:datatable var="item" value="#{usercontroller.items}" rows="#{usercontroller.pagesize}"                      lazy="true" selectionmode="single" rowkey="#{item.userid}" selection="#{usercontroller.selected}"                      paginator="true" id="itemstable"  rowsperpagetemplate="10,30,50">               <p:ajax event="rowselect" listener="#{usercontroller.onrowselect}" update=":listform:itemdisplay" oncomplete="itemdialog.show()" />              <p:column headertext="id" id="userid" sortby="#{item.userid}" style="width: 10px;">                 #{item.userid}             </p:column>              <p:column headertext="first name" id="first-name" sortby="#{item.firstname}">                 #{item.firstname}             </p:column>              <p:column headertext="last name" id="last-name" sortby="#{item.lastname}">                 #{item.lastname}             </p:column>              <p:column headertext="email" id="email" sortby="#{item.email}" filterby="#{item.email}">                 #{item.email}             </p:column>              <p:column headertext="user" id="name" sortby="#{item.username}">                 #{item.username}             </p:column>              <p:column headertext="birthdate" id="birthdate" sortby="#{item.birthdate}">                 <h:outputtext value="#{item.birthdate}" >                     <f:convertdatetime type="date" pattern="yyyy/mm/dd"/>                 </h:outputtext>             </p:column>              <p:column headertext="role" id="status" sortby="#{item.statusid.name}">                 #{item.statusid.name}             </p:column>                <p:column style="width:32px;">                 <h:panelgrid columns="3" class="datarow-icons">                     <p:commandbutton icon="ui-icon-trash" update=":listform:itemstable :listform:confirmdelete"                                      oncomplete="deletedialog.show()">                         <f:setpropertyactionlistener value="#{item}" target="#{usercontroller.selected}" />                     </p:commandbutton>                      <p:commandbutton icon="ui-icon-pencil" immediate="true" action="#{usercontroller.prepareedit}" ajax="false">                         <f:setpropertyactionlistener value="#{item}" target="#{usercontroller.selected}" />                     </p:commandbutton>                      <p:commandbutton id="select-button"                                       update=":listform:itemdisplay"                                       oncomplete="itemdialog.show()" icon="ui-icon-search"                                      title="view" >                         <f:setpropertyactionlistener value="#{item}" target="#{usercontroller.selected}" />                     </p:commandbutton>                 </h:panelgrid>             </p:column>         </p:datatable>         <p:dialog widgetvar="itemdialog" resizable="false"                   showeffect="explode" hideeffect="explode" header="item detail">             <p:panelgrid columns="2" id="itemdisplay" style="width: 250px;">                 <h:outputtext value="id: " />                 <h:outputtext value="#{usercontroller.selected.userid}" />                  <h:outputtext value="name: " />                 <h:outputtext value="#{usercontroller.selected.username}" />                  <h:outputtext value="description: " />                 <h:outputtext value="#{usercontroller.selected.firstname}" />             </p:panelgrid>         </p:dialog>         <p:confirmdialog id="confirmdelete" header="confirm delete"                           widgetvar="deletedialog" severity="alert"                          showeffect="fade" hideeffect="fade"                          closable="false"                          message="¿realmente desea borrar '#{usercontroller.selected.tostring()}' ?">             <p:commandbutton id="decline" value="not yet"                               onclick="deletedialog.hide();" type="button" />             <p:commandbutton id="accept" value="confirmar"                               update=":listform"                               oncomplete="deletedialog.hide();"                              action="#{usercontroller.delete}" ajax="false">             </p:commandbutton>         </p:confirmdialog>     </h:form> 

i managed rowselect work overriding getrowdata in userlazydatamodel (a subclass of lazydatamodelbase showed) follows:

@override public user getrowdata(string rowkey) {     try {         return ((userfacade) getfacade()).findbyid(integer.parseint(rowkey));     } catch (exception e) {         return null;     }  } 

and deleting

rowkey="#{item.userid}" 

attribute datatable declaration. declared facade in subclass userlazydatamodel , default different parent class lazydatamodelbase (set null). solution delete field subclass , access parent fiel means of getfacade method casting userfacade.

setpropertyactionlistener not working yet.


Comments

Popular posts from this blog

php - Calling a template part from a post -

Firefox SVG shape not printing when it has stroke -

How to mention the localhost in android -