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

Popular posts from this blog

how to insert data php javascript mysql with multiple array session 2 -

multithreading - Exception in Application constructor -

windows - CertCreateCertificateContext returns CRYPT_E_ASN1_BADTAG / 8009310b -