0

Map<String, List<Object>>次のように、rich:pickList のバッキング プロパティとして使用したいと考えています。

       <ui:repeat value="#{bean.selectedMap.entrySet" var="entry"} >
        <rich:pickList value="#{entry.value}" var="list" >
            <f:selectItems value="#{bean.getAll}" />
            <f:converter converterId="myBeanConverter" />
         </rich:pickList>
       </ui:repeat>

バッキング Bean:

public class MyBean {
private Map<String, List<String>> myList;
...
getters/setters for myList
}

問題は、私がまだこの例外を受け取っていることです:

15:19:16,583 SEVERE [info.fingo.salutor.exception.CustomExceptionHandler] (http--127.0.0.1-8080-4) Critical Exception!: javax.faces.FacesException: ModelType (class java.lang.Object) must be either an Array, or a Collection
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:84) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:]
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]

Caused by: javax.faces.FacesException: ModelType (class java.lang.Object) must be either an Array, or a Collection
    at org.richfaces.renderkit.SelectManyHelper.getConvertedValue(SelectManyHelper.java:332) [richfaces-components-ui-4.2.2.Final.jar:4.2.2.Final]
    at org.richfaces.renderkit.SelectManyRendererBase.getConvertedValue(SelectManyRendererBase.java:108) [richfaces-components-ui-4.2.2.Final.jar:4.2.2.Final]
    at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at javax.faces.component.UIInput.validate(UIInput.java:960) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1233) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at javax.faces.component.UIInput.processValidators(UIInput.java:698) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at com.sun.faces.facelets.component.UIRepeat.process(UIRepeat.java:532) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at com.sun.faces.facelets.component.UIRepeat.processValidators(UIRepeat.java:766) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at javax.faces.component.UIForm.processValidators(UIForm.java:253) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
    at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76) [jsf-impl-2.1.7-jbossorg-2.jar:]
    ... 39 more

何が起こっているのか誰か知っていますか?

4

1 に答える 1

1

EL 式を適切に閉じられなかったことに目をつぶると ( })、問題は実際getEntrySetにはマップ インスタンスにメソッドが定義されていないことです。したがって、環境が EL 2.2 をサポートしていると仮定すると、()EL 式の最後に関数呼び出しを配置し​​て、それがメソッド呼び出しであることを EL に伝えます。

次に、<ui:repeat>現在 は の繰り返しをサポートしていないためSet、 を返すヘルパー getter を作成するかList、カスタム EL 関数を作成するか、Set#toArray()メソッドを使用します。

たとえば、後者は次のようになります#{bean.selectedMap.entrySet().toArray()}。別の代替案については、Stack Overflow で既に尋ねられ、回答された質問に対するこのトピックの回答を参照してください。

于 2013-05-15T14:13:34.047 に答える