1

私は取った。私がCollection<Edition> selectedEditions;このように繰り返すとき:

    Collection<Edition> edlist=(java.util.Collection)selectedEditions;         
for(Edition ed:edlist){ // error at this line
            EditionID=ed.getEditionID();
            NewspaperID=ed.getNewspaper().getNewspaperID();
            StateID=ed.getCity().getState().getStateID();
            System.out.print("nid..........."+NewspaperID);
            System.out.print("sid..........."+StateID);
        } 

次に、次のようなエラーが発生します:java.lang.ClassCastException:java.lang.Stringをentity.Edition
my getter setterにキャストできません:

public Collection<Edition> getSelectedEditions() {
                return selectedEditions;
}
public void setSelectedEditions(Collection<Edition> selectedEditions) {
        this.selectedEditions = selectedEditions;
    } 

                              </h:selectManyCheckbox>
                            <h:dataTable id="dt1" value="#{adcreateBean.selectedEditions}"  var="it" styleClass="nostyle" width="100%">
                                        <f:facet name="header">
                                            <h:outputText value="You have selected :" />
                                        </f:facet>
                                        <h:column>
                                            <h:outputText value="#{it}" />
                                     </h:column>
                                   </h:dataTable>

では、どうすればentity.Editionにキャストできますか?この質問の答えで言われているように([ jsfで複数選択されたチェックボックスの値を取得するにはどうすればよいですか?)、どのように変換できますか?

jsfで複数選択されたチェックボックス値を取得するにはどうすればよいですか?

4

1 に答える 1

2

前の質問でコメント/回答したように、 と の間でConverter変換するカスタムを作成するだけです。実装するクラスを作成し、それに応じてメソッドを実装するだけです。StringEditionjavax.faces.convert.Converter

@FacesConverter("editionConverter")
public class EditionConverter implements Converter {

    @Override
    public Object getAsString(FacesContext context, UIComponent component, Object object) {
        // Write code yourself which converts from Edition object to its unique 
        // String representation. This string will then be used in HTML and HTTP.
    }

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) {
        // Write code yourself which converts from unique String representation
        // back to Edition object. This object will then be used in JSF model.
    }

}

通常、技術 ID は一意のString表現として使用されています。基本的なキックオフの例を次に示します。

@FacesConverter("editionConverter")
public class EditionConverter implements Converter {

    @Override
    public Object getAsString(FacesContext context, UIComponent component, Object object) {
        Long id = (object instanceof Edition) ? ((Edition) object).getId() : null;
        return (id != null) ? String.valueOf(id) : null;
    }

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) {
        Long id = (submittedValue != null) ? Long.valueOf(submittedValue) : null;
        return (id != null) ? someEditionService.find(id) : null;
    }

}

最後に で使用します<h:selectManyCheckbox>

<h:selectManyCheckbox ... converter="editionConverter">

これはキャストとはまったく同じではないことに注意してください。EditionのスーパークラスまたはサブクラスではありませんString。キャストとは何かを正確に理解するには、この件に関する Oracle 独自の基本的な Java チュートリアルをお読みください。

于 2012-06-17T13:41:59.340 に答える