JSF and Primefaces; form not passing validation -
disclaimer: school project.
hello,
i'm having strange issue has hold me days.
project im working on car tracking , paying system.
i'm trying add web page project adds region roads, or edits existing region.
when adding region goes fine, variables taken form , region saved database. when add code selecting , adding roads buttons not working anymore.
i found out when remove selectonemenu page loads, , submits region (withouth roads), couldn't find mistake in selectonemenu
i did research , found out problem caused validation error when button validates form. source 1: link
i tried fix problem checking if did wrong said in source 2 no success:
source 2:link
here body code of addregion.xhtml :
<body> <ui:composition template="./templates/administrationtemplate.xhtml"> <!-- side menu --> <ui:define name="menu"> <ui:include src="./templates/regionmenu.xhtml"/> </ui:define> <ui:define name="content"> <f:metadata> <!-- region id editing existing region --> <f:viewparam name="regionid" value="#{addregionbean.regionid}" required="false"/> </f:metadata> <h:form> <table> <tr> <td> <p:outputlabel value="naam: "/> </td> <td> <p:inputtext value="#{addregionbean.name}"/> </td> </tr> <tr> <td> <p:outputlabel value="start datum: "/> </td> <td> <p:calendar value="#{addregionbean.startdate}" showon="button"/> </td> </tr> <tr> <td> <p:outputlabel value="tarief: "/> </td> <td> <p:inputtext value="#{addregionbean.rate}"/> </td> </tr> <tr> <td> <p:outputlabel value="tarief type: "/> </td> <td> <p:selectonemenu value="#{addregionbean.ratetype}"> <f:selectitems value="#{addregionbean.ratelist}"/> </p:selectonemenu> <h:outputtext value="<br/>" escape="false" /> </td> </tr> <tr> <td> </td> <td><p:outputlabel value="wegen: "/> <p:datatable value="#{addregionbean.roads}" var="road"> <p:column headertext="regio id + naam" > <p:commandlink value="#{road.roadid}"/> </p:column> <p:column headertext="lengte" > <p:outputlabel value="#{road.distance}"/> </p:column> <p:column headertext="maximum snelheid" > <p:outputlabel value="#{road.maxspeed}"/> </p:column> </p:datatable> </td> <td> <!-- goes wrong, when selectonemenu removed, buttons work --> <p:outputlabel value="voeg een weg toe: " rendered="#{addregionbean.askaddview()}" /> <br/> <p:selectonemenu converter="roadconverter" value="#{addregionbean.selectedroad}" rendered="#{addregionbean.askaddview()}"> <f:selectitems value="#{addregionbean.giveallroads()}" var="selroad" itemlabel="#{selroad.roadid}" itemvalue="#{selroad}"/> </p:selectonemenu> <br/> <p:commandbutton value="voeg toe" action="#{addregionbean.addroadtoregion}" rendered="#{addregionbean.askaddview()}"/> </td> </tr> <tr> <td> <p:commandbutton value="#{addregionbean.submitsort}" action="#{addregionbean.addregion()}" /> </td> <td></td> </tr> </table> </h:form> </ui:define> </ui:composition> </body>
and here code of bean:
package billingadministrationsystem.beans; import common.administration.enum.eratetype; import common.administration.iregion; import common.communication.interfaces.iregionservice; import common.communication.interfaces.iroadservice; import common.trafficmanagement.iroad; import java.io.serializable; import java.util.arraylist; import java.util.date; import java.util.list; import javax.annotation.postconstruct; import javax.ejb.ejb; import javax.enterprise.context.requestscoped; import javax.inject.named; @named(value = "addregionbean") @requestscoped public class addregionbean implements serializable { private double rate; private eratetype ratetype; private date startdate; private long regionid; private string name; private iregion region = null; private list<iroad> allroads; private list<iroad> roads = new arraylist<iroad>(); private iroad selectedroad = null; @ejb private iregionservice service; @ejb private iroadservice roadservice; @postconstruct public void init() { rate = 0; ratetype = eratetype.cordon; startdate = new date(); initallroads(); } /* * adds or changes region. called in xhtml. */ public void addregion() { if (region != null) { changeregion(); } else { service.addregion(name, rate, ratetype, startdate, roads); //region = service.getregion(regionid); } } /** * saves changes region. */ public void changeregion() { service.changebaserate(regionid, rate, ratetype, startdate); } /** * gets text submit button. * @return returns "toevoegen" if new region , "opslaan" if region change. */ public string getsubmitsort() { if (askaddview()) { return "toevoegen"; } else { return "opslaan"; } } /** * * @return returns true if region loaded , not new region. */ public boolean askaddview() { return (region == null ? true : false); } public void setname(string name) { this.name = name; } public string getname() { return this.name; } /** * gets list of possible rate sorts. * * @return list "cordon" , "corridor" in it. */ public list<string> getratelist() { list<string> strings = new arraylist<string>(); strings.add("cordon"); strings.add("corridor"); return strings; } public double getrate() { return rate; } public void setrate(double rate) { this.rate = rate; } public string getratetype() { return ratetype.tostring(); } public void setratetype(string ratetype) { if (ratetype.equals("cordon")) { this.ratetype = eratetype.cordon; } else if (ratetype.equals("corridor")) { this.ratetype = eratetype.corridor; } else { system.out.println("could not find ratetype!"); } } public date getstartdate() { return startdate; } public void setstartdate(date startdate) { this.startdate = startdate; } public string getregionid() { return regionid + ""; } public void setregionid(string regionid) { this.regionid = long.parselong(regionid); system.out.println("region id is: " + regionid); setallfields(); } /** * sets fields of region if region must edited * specified. */ private void setallfields() { if (regionid != 0) { region = service.getregion(regionid); rate = region.getcurrentbaserate().getbaserateid(); startdate = region.getcurrentbaserate().getstartdate(); ratetype = region.getcurrentbaserate().gettype(); roads = region.getroads(); name = region.getregionname(); } } public list<iroad> getroads() { return roads; } public void setroads(list<iroad> roads) { this.roads = roads; } public iroad getselectedroad() { if (selectedroad != null) { system.out.println("getting selected road " + selectedroad.getroadid()); } else { system.out.println("getting selected road null."); if (allroads != null) { selectedroad = (iroad) allroads.get(0); } else{ system.out.println("selectedroad , allroads null."); } } return selectedroad; } public void setselectedroad(iroad selectedroad) { system.out.println("setting selected road " + selectedroad.getroadid()); this.selectedroad = selectedroad; } /** * gives available roads. * * @return roads in system. */ public list<iroad> giveallroads() { return allroads; } /** * fills allroads variable roads reachable roadservice. */ private void initallroads() { allroads = roadservice.getroads(); } /** * adds selected road region. */ public void addroadtoregion() { if (selectedroad != null) { system.out.println("adding road " + selectedroad.getroadid()); roads.add(selectedroad); } else { system.out.println("cannot add road region, selectedroad null!"); } } }
so exact question is: doing wrong selectonemenu makes buttons in form stop working?
i'm sorry read, please ask if require explanation on system.
i using:
netbeans 7.2.1
glassfish 3.1.2
primefaces 3.5
any help/suggestion appreciated :)
Comments
Post a Comment