2013-06-28 6 views
7

मैं एक enum साथ JSF/SelectManyCheckBox टैग का उपयोग करने की कोशिश कर रहा हूँ नया संग्रह उदाहरण बनाने में असमर्थ मेरा एक्सएचटीएमएल कोड है:

  <h:form id="searchForm"> 
       <h:panelGrid columns="2"> 
        <h:outputText value="Searched queues" /> 
        <h:panelGroup> 
         <h:selectManyCheckbox layout="pageDirection" value="#{jmsErrorController.errorSearchCriteria.searchedQueues}" converter="queueConverter"> 
          <f:selectItems value="#{jmsErrorController.completeQueueList}" /> 
         </h:selectManyCheckbox> 
        </h:panelGroup> 
       </h:panelGrid> 
       <h:commandButton action="#{jmsErrorController.search}" 
        value="Search !" /> 
      </h:form> 

मैंने एक अन्य पोस्ट में बताए गए कनवर्टर को जोड़ा है।

यह ठीक से काम करने लगता है, लेकिन मैं कंसोल पर इस स्टैक ट्रेस देखें:

28-Jun-2013 09:07:46 com.sun.faces.renderkit.html_basic.MenuRenderer createCollection 
SEVERE: Unable to create new Collection instance for type java.util.Arrays$ArrayList 
java.lang.InstantiationException: java.util.Arrays$ArrayList 
at java.lang.Class.newInstance0(Class.java:340) 
at java.lang.Class.newInstance(Class.java:308) 
at com.sun.faces.renderkit.html_basic.MenuRenderer.createCollection(MenuRenderer.java:907) 
at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectManyValuesForModel(MenuRenderer.java:367) 
at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectManyValue(MenuRenderer.java:129) 
at com.sun.faces.renderkit.html_basic.MenuRenderer.getConvertedValue(MenuRenderer.java:315) 
at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030) 
at javax.faces.component.UIInput.validate(UIInput.java:960) 
at javax.faces.component.UIInput.executeValidate(UIInput.java:1233) 
at javax.faces.component.UIInput.processValidators(UIInput.java:698) 
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) 
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) 
at javax.faces.component.UIForm.processValidators(UIForm.java:253) 
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) 
at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172) 
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) 
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) 
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300) 
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26) 
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) 
at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27) 
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) 
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.doIt(WebAppServletContext.java:3684) 
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3650) 
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121) 
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2268) 
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2174) 
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1446) 
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201) 
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173) 

इस स्टैकट्रेस के बाद, आवेदन ठीक काम करने के लिए लगता है, लेकिन मुझे आश्चर्य है कि क्यों इस तरह के एक स्टैकट्रेस है ..

क्या कोई मेरी मदद कर सकता है?

धन्यवाद।

स्टीफन।

उत्तर

14

यह तब होगा जब UISelectMany घटक का value प्रदान किया जा रहा है के बजाय Arrays#asList() विधि का उपयोग करके बनाया गया है।

यदि मॉडल value पहले से ही प्रीपॉप्लेट किया गया है, तो जेएसएफ सबमिट किए गए मानों को रखने और नए मॉडल मान को सेट करने के लिए बिल्कुल उसी प्रकार का उपयोग करने का प्रयास करेगा। हालांकि, java.util.Arrays$ArrayListArrays#asList() द्वारा लौटाए गए प्रकार java.util.Arrays कक्षा में आंतरिक है और new Arrays$ArrayList() में व्यक्तिगत रूप से तत्काल नहीं है। इसलिए यह अपवाद।

इसे ठीक करने के लिए, सुनिश्चित करें कि मान new ArrayList() का उपयोग करके बनाया गया है।

वैकल्पिक रूप से, इस निकट से संबंधित उत्तर में निर्देशित अनुसार collectionType विशेषता के माध्यम से संग्रह प्रकार को स्पष्ट रूप से निर्दिष्ट करें: org.hibernate.LazyInitializationException at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectManyValuesForModel

<h:selectManyCheckbox ... collectionType="java.util.ArrayList"> 
संबंधित मुद्दे