8

列挙型で JSF / SelectManyCheckBox タグを使用しようとしています:

ここに私のxhtmlコードがあります:

            <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)

このスタックトレースの後、アプリケーションは正常に動作しているように見えますが、なぜこのようなスタックトレースがあるのだろうか..

誰かが私を助けることができますか?

ありがとう。

ステファン。

4

1 に答える 1

21

これは、提供されているUISelectManyコンポーネントがではなく メソッドをvalue使用して作成されている場合に発生します。Arrays#asList()new ArrayList()

モデルvalueがすでに事前設定されている場合、JSF はまったく同じタイプを使用して、送信された値を入力し、新しいモデル値を設定しようとします。ただし、java.util.Arrays$ArrayListによって返される型はクラスのArrays#asList()内部にあり、 のように個別にインスタンス化することはできません。したがって、この例外。java.util.Arraysnew Arrays$ArrayList()

これを修正するには、値が を使用して作成されていることを確認してnew ArrayList()ください。

collectionTypeまたは、この密接に関連する回答で指示されているように、属性を介してコレクションタイプを明示的に指定します: com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectManyValuesForModel の org.hibernate.LazyInitializationException

<h:selectManyCheckbox ... collectionType="java.util.ArrayList">
于 2013-06-28T09:47:15.480 に答える