Posting a 2D array in JSF -
i have application risk matrix. headings 5 severities (from severitiesbean in example) , 5 likelihoods (from likelihoodsbean in example). (the headings go different names in literature, such exposure or probability or consequences.) in each cell there risk rating (enumerated riskratingsbean). give idea of looks visually, there example here.
i able display matrix fine, seems people asking related questions on cared about. however, want display , allow administrator of system edit risk each cell in grid. selectonemenu dropdown in either h: or p: (primefaces) seems way of allowing selection.
here's jsf:
<h:panelgroup id="editarea"> <table border="1" style="border-collapse:collapse;" class="riskmatrix"> <tr> <td rowspan="2" colspan="2"></td> <th colspan="5">severity</th> </tr> <tr> <!-- severities going across top --> <ui:repeat var="severity" value="#{severitiesbean.severities}"> <th style="text-align: center;"> <h:outputtext value="#{severity.name}"/> </th> </ui:repeat> </tr> <ui:repeat id="likelihoodloop" var="likelihood" value="#{likelihoodsbean.likelihoods}" varstatus="lkhdvar"> <tr> <ui:fragment rendered="#{lkhdvar.index == 0}"> <th rowspan="5">likelihood</th> </ui:fragment> <!-- likelihoods going down side --> <th> <h:outputtext value="#{likelihood.name}"/> </th> <!-- rating each cell going across --> <ui:repeat id="severitiesloop" var="severity" value="#{severitiesbean.severities}"> <td class="#{riskratingsbean.riskratings.get(riskmatrixbean.riskmatrix[severity.id-1][likelihood.id-1]-1).cssclass}" style="text-align: center;"> <p:selectonemenu id="riskratingdropdown" effect="none" value="#{riskmatrixbean.riskmatrix[severity.id-1][likelihood.id-1]}"> <f:selectitems value="#{riskratingsbean.riskratings}" var="rating" itemlabel="#{rating.name}" itemvalue="#{rating.id}"/> </p:selectonemenu> </td> </ui:repeat> </tr> </ui:repeat> </table> </h:panelgroup> <h:messages id="riskmatrixerrormessages"/> <p:commandbutton id="savebutton" value="update" actionlistener="#{riskmatrixbean.saveriskmatrix}" update="editarea"/> in riskmatrixbean, matrix defined this:
public int[][] getriskmatrix() { return riskmatrix; } this displays perfectly. however, want able update values. when click on submit button, exception:
javax.faces.component.updatemodelexception: java.lang.classcastexception: unable add object of type [java.lang.integer] array of objects of type [int] @ javax.faces.component.uiinput.updatemodel(uiinput.java:866) @ javax.faces.component.uiinput.processupdates(uiinput.java:749) @ com.sun.faces.facelets.component.uirepeat.process(uirepeat.java:633) @ com.sun.faces.facelets.component.uirepeat.processupdates(uirepeat.java:880) @ com.sun.faces.facelets.component.uirepeat.process(uirepeat.java:633) @ com.sun.faces.facelets.component.uirepeat.processupdates(uirepeat.java:880) @ javax.faces.component.uicomponentbase.processupdates(uicomponentbase.java:1291) @ javax.faces.component.uicomponentbase.processupdates(uicomponentbase.java:1291) @ javax.faces.component.uiform.processupdates(uiform.java:281) @ javax.faces.component.uicomponentbase.processupdates(uicomponentbase.java:1291) @ javax.faces.component.uiviewroot.processupdates(uiviewroot.java:1254) @ com.sun.faces.lifecycle.updatemodelvaluesphase.execute(updatemodelvaluesphase.java:78) @ com.sun.faces.lifecycle.phase.dophase(phase.java:101) @ com.sun.faces.lifecycle.lifecycleimpl.execute(lifecycleimpl.java:198) @ javax.faces.webapp.facesservlet.service(facesservlet.java:650) @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:305) @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:210) @ org.apache.myfaces.webapp.filter.extensionsfilter.dofilter(extensionsfilter.java:357) @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:243) @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:210) @ org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:222) @ org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:123) @ org.apache.catalina.authenticator.authenticatorbase.invoke(authenticatorbase.java:581) @ org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:171) @ org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:99) @ org.apache.catalina.valves.accesslogvalve.invoke(accesslogvalve.java:931) @ org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:118) @ org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:407) @ org.apache.coyote.http11.abstracthttp11processor.process(abstracthttp11processor.java:1004) @ org.apache.coyote.abstractprotocol$abstractconnectionhandler.process(abstractprotocol.java:589) @ org.apache.tomcat.util.net.jioendpoint$socketprocessor.run(jioendpoint.java:312) @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1145) @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:615) @ java.lang.thread.run(thread.java:745) caused by: java.lang.classcastexception: unable add object of type [java.lang.integer] array of objects of type [int] @ javax.el.arrayelresolver.setvalue(arrayelresolver.java:96) @ com.sun.faces.el.demuxcompositeelresolver._setvalue(demuxcompositeelresolver.java:255) @ com.sun.faces.el.demuxcompositeelresolver.setvalue(demuxcompositeelresolver.java:281) @ org.apache.el.parser.astvalue.setvalue(astvalue.java:218) @ org.apache.el.valueexpressionimpl.setvalue(valueexpressionimpl.java:253) @ com.sun.faces.facelets.el.tagvalueexpression.setvalue(tagvalueexpression.java:131) @ javax.faces.component.uiinput.updatemodel(uiinput.java:832) ... 33 more i'm @ loss i'm doing wrong. updatemodel during updatemodelvaluesphase doesn't know how deal int[][] , how i've specified selectonemenu value attribute. suspect there wrong approach, i'm not sure what. maybe it's nested ui:repeats? tried change using integer[][] , list<list<integer>>, , still no luck, although did else wrong along way. i'm open changing data type necessary.
thanks in advance!
Comments
Post a Comment