jpa - RichFaces 4 dataTable edit issue -
i such table editing here -> http://showcase.richfaces.org/richfaces/component-sample.jsf?demo=datatable&sample=datatableedit&skin=bluesky . problem ist that, when changes in editpane (popuppanel) not remembered in private osobatelefon edytujosobe. make update impossible via jpa. have getters , setters , class osobatelefon implements serializable.
@managedbean(name = "administrator") @viewscoped @sessionscoped public class administrator implements serializable @ejb private uzytkownikfacade uzytkownikfacade; private static final long serialversionuid = 1l; @ejb private osobafacade osobafacade; private osoba osobaadmina; private int numerstrony = 1; private uzytkownik uzytkownik; private list<osoba> listaosob; private static final int client_rows_in_ajax_mode = 10; private int clientrows; private int wybranaosoba; private osobatelefon edytujosobe; //it doesn't remember changes made in editpane private list<osobatelefon> osobyitelefony; /** * creates new instance of administrator */ public administrator() { } public void aktualizacjawybranejosoby() { this.osobyitelefony.set(this.wybranaosoba, this.edytujosobe); osoba nowaosoba = new osoba(); list<telefon> nowalistatelefonow = new arraylist<telefon>(); osobatelefon osobatelefon = this.osobyitelefony.get(this.wybranaosoba); int o = this.osobyitelefony.get(this.wybranaosoba).getidosoby(); int of = this.osobyitelefony.get(this.wybranaosoba).getidtelefonu(); system.out.println("wybrana osoba id " + o); system.out.println("wybrane id fona " + of); boolean znalezionoosobe = false; iterator<osoba> iteos = this.listaosob.iterator(); while (!znalezionoosobe && iteos.hasnext()) { osoba os = iteos.next(); if (os.getidosoba() == o) { znalezionoosobe = true; nowaosoba.setidosoba(os.getidosoba()); nowaosoba.setimie(osobatelefon.getimie()); nowaosoba.setnazwisko(osobatelefon.getnazwisko()); nowaosoba.setkodpocztowy(osobatelefon.getkodpocztowy()); nowaosoba.setmiejscowosc(osobatelefon.getmiejscowosc()); nowaosoba.setulica(osobatelefon.getulica()); nowaosoba.setuzytkowniklist(os.getuzytkowniklist()); telefon nowytelefon = new telefon(); (telefon tel : os.gettelefonlist()) { if (tel.getidtelefon() == of) { nowytelefon.setfkidosoba(nowaosoba); nowytelefon.setidtelefon(of); nowytelefon.setnumer(this.edytujosobe.getnumer()); system.out.println("nr tel. "+tel.getnumer()); nowytelefon.setopis(this.edytujosobe.getopis()); nowytelefon.setzastrzezony(this.edytujosobe.getzastrzezony()); nowalistatelefonow.add(nowytelefon); } else { nowalistatelefonow.add(tel); } } nowaosoba.settelefonlist(nowalistatelefonow); this.osobafacade.aktualizujosoba(nowaosoba); this.pobierzosobydotabeli(); } } } public list<osoba> pobierzosobydotabeli() { //getting people phone list<osobatelefon> works } public void switchajaxloading(valuechangeevent event) { this.clientrows = (boolean) event.getnewvalue() ? client_rows_in_ajax_mode : 0; } public void zapelnijlistetelefonow() { //getting people phone number list<phone> works } public void usunosobe() { //deleting people works } } the xhtml
<a4j:status onstart="#{rich:component('statpane')}.show()" onstop="#{rich:component('statpane')}.hide()" /> <h:form id="formprojekty"> <rich:datatable value="#{administrator.osobyitelefony}" var="pr" iterationstatusvar="ite" id="table" rows="8" > <rich:column width="auto"> <f:facet name="header">imię</f:facet> <h:outputtext value="#{pr.imie}" /> </rich:column> <rich:column> <a4j:commandlink styleclass="no-decor" render="editgrid" execute="@this" oncomplete="#{rich:component('editpane')}.show()"> <h:graphicimage library="img" name="edit.gif" alt="edycja"/> <a4j:param value="#{ite.index}" assignto="#{administrator.wybranaosoba}" /> <f:setpropertyactionlistener target="#{administrator.edytujosobe}" value="#{pr}" /> </a4j:commandlink> <a4j:commandlink styleclass="no-decor" execute="@this" render="@none" oncomplete="#{rich:component('confirmpane')}.show()"> <h:graphicimage library="img" name="delete.gif" alt="usuń"/> <a4j:param value="#{ite.index}" assignto="#{administrator.wybranaosoba}" /> <f:setpropertyactionlistener target="#{administrator.edytujosobe}" value="#{pr}" /> </a4j:commandlink> </rich:column> <f:facet name="footer"> <rich:datascroller page="#{administrator.numerstrony}" /> </f:facet> </rich:datatable> <a4j:jsfunction name="remove" action="#{administrator.usunosobe()}" render="table" execute="@this" oncomplete="#{rich:component('confirmpane')}.hide();" /> <a4j:jsfunction name="edycja" action="#{administrator.aktualizacjawybranejosoby()}" render="table" execute="@this" oncomplete="#{rich:component('editpane')}.hide();" /> <rich:popuppanel id="statpane" autosized="true"> <h:graphicimage library="img" name="ai.gif" alt="czekaj"/> proszę czekać... </rich:popuppanel> <rich:popuppanel id="confirmpane" autosized="true"> czy na pewno usunać? <a4j:commandbutton value="tak" onclick="remove(); return false;" /> <a4j:commandbutton value="nie" onclick="#{rich:component('confirmpane')}.hide(); return false;" /> </rich:popuppanel> <rich:popuppanel header="edycja osoby" id="editpane" domelementattachment="parent" width="180" height="420"> <h:panelgrid columns="1" id="editgrid"> <h:panelgroup > <h:outputtext value="imię" /><br /> <h:inputtext value="#{administrator.edytujosobe.imie}" > <f:validatelength maximum="32" minimum="3"/> </h:inputtext> </h:panelgroup> </h:panelgrid><br/> <a4j:commandbutton value="aktualizuj" onclick="edycja(); return false;"/> <a4j:commandbutton value="anuluj" onclick="#{rich:component('editpane')}.hide(); return false;" /> </rich:popuppanel> </h:form>
if can change make aktualizuj a4j-link little bit easier. try that:
<a4j:commandbutton value="aktualizuj" onclick="#{rich:component('editpane')}.hide();" action="#{administrator.aktualizacjawybranejosoby()}" render="table"/> and put a4j:region inputtext , link send required values:
<rich:popuppanel header="edycja osoby" id="editpane" domelementattachment="parent" width="180" height="420"> <a4j:region> <h:panelgrid columns="1" id="editgrid"> <h:panelgroup > <h:outputtext value="imię" /><br /> <h:inputtext value="#{administrator.edytujosobe.imie}" > <f:validatelength maximum="32" minimum="3"/> </h:inputtext> </h:panelgroup> </h:panelgrid><br/> <a4j:commandbuttonvalue="aktualizuj" onclick="# {rich:component('editpane')}.hide();"action="#{administrator.aktualizacjawybranejosoby()}" render="table"/> <a4j:commandbutton value="anuluj" onclick="#{rich:component('editpane')}.hide(); return false;" /> </a4j:region> </rich:popuppanel> i add render="table" aktualizuj a4j:link update value in datatable
Comments
Post a Comment