3

JSFフォームを送信すると、次の例外が発生します。

Caused by: javax.faces.FacesException: Target model Type is no a Collection or Array 
    at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectManyValuesForModel(MenuRenderer.java:388) [:2.0.3-] 
    at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectManyValue(MenuRenderer.java:125) [:2.0.3-] 
    at com.sun.faces.renderkit.html_basic.MenuRenderer.getConvertedValue(MenuRenderer.java:311) [:2.0.3-] 
    at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1023) [:2.0.3-]     at javax.faces.component.UIInput.validate(UIInput.java:953) [:2.0.3-] 
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1204) [:2.0.3-] 
    at javax.faces.component.UIInput.processValidators(UIInput.java:693) [:2.0.3-] 
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1081) [:2.0.3-] 
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1081) [:2.0.3-] 
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1081) [:2.0.3-] 
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1081) [:2.0.3-] 
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1081) [:2.0.3-] 
    at javax.faces.component.UIForm.processValidators(UIForm.java:240) [:2.0.3-] 
    at org.ajax4jsf.component.AjaxViewRoot$3.invokeContextCallback(AjaxViewRoot.java:439) [:3.3.1.GA] 
    at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:238) [:3.3.1.GA] 
    at org.ajax4jsf.component.AjaxViewRoot.processValidators(AjaxViewRoot.java:455) [:3.3.1.GA] 
    at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:72) [:2.0.3-]   at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97) [:2.0.3-] 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114) [:2.0.3-] 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308) [:2.0.3-]
    ... 42 more

これはどのように発生し、どうすれば解決できますか?

4

2 に答える 2

7
javax.faces.FacesException: Target model Type is no a Collection or Array
    at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectManyValuesForModel(MenuRenderer.java:388)

この例外は、値がコレクションまたは配列にバインドされていないUISelectManyなどのコンポーネントがビューにあることを示します。これは正しくないです。コンポーネントは複数の送信された値を取得できるため、その値はコレクション(のような)または配列(のような)にバインドする必要があります。<h:selectManyMenu><h:selectManyListbox>List<Entity>Entity[]

入力されたアイテム<h:selectManyMenu>を使用していると仮定した場合の、適切な外観のキックオフの例を次に示します。String

<h:selectManyMenu value="#{bean.selectedItems}">
    <f:selectItems value="#{bean.availableItems}" />
</h:selectManyMenu>
<h:commandButton value="submit" action="#{bean.submit}" />

private List<String> selectedItems; // Note: List<String> and thus NOT String!
private List<String> availableItems;

@PostConstruct
public void init() {
    availableItems = Arrays.asList("one", "two", "three", "four", "five");
}

public void submit() {
    System.out.println("Selected items: " + selectedItems);
}

参照:

于 2013-02-04T11:58:43.103 に答える
0

私の解決策は次のとおりです。タグのタグから属性「dtSubItem」を削除するprocess<p:commandButton>、すべて正常に機能します。コマンドボタンは、送信イベントでデータテーブルを送信していました。

最初のリクエストで動作しましたが、データテーブルにデータが入力されると、2番目のリクエストでエラーが発生しました。

<div class="ui-g-12 ui-md-6 ui-lg-2">
  <div class="espacoCampo">
      <p:outputLabel value=""  />  
          <p:commandButton  actionListener="#{managedBean.adicionarSubItemPanel(item)}"
                update="dtSubItem"
                title="Clique aqui para adicionar SubItem"
                icon="fa fa-plus"
                value="Adicionar"
                process="@this dtSubItem cadSubItens"
                iconPos="right"
                 >
      </p:commandButton>
    </div>
</div>


<p:dataTable var="subItem" id="dtSubItem" emptyMessage="Sem registros adicionados" value="#{item.btpResolucaoItemSubitemList}">
...
</p:dataTable>	

于 2019-04-09T13:11:05.317 に答える