0

私は何か間違ったことをしているとほぼ確信しているので、質問のタイトルは少し間違っています。

新しいユーザー オブジェクト (ログイン、パスワード、誕生日などのフィールド) を作成するためのいくつかのフィールドを持つフォームがあります。そして、キャンセルと作成の 2 つのボタンがあります。私はまだ作成を完了していません:)、しかし、キャンセルを押すと、NullPointerExceptionが表示されます。簡略化されたコードは次のとおりです。

<f:view>
    <h:form>
        <h:panelGroup layout="block">       
            <h:inputText id="add_login" value="#{userSupport.user.login}"/>
            <h:inputSecret id="add_password" value="#{userSupport.user.password}"/>
            <h:inputText id="add_name" value="#{userSupport.user.name}"/>
            <h:inputText id="add_surname" value="#{userSupport.user.surname}"/>

            <h:commandButton value="Cancel" action="cancel"/>
        </h:panelGroup>
    </h:form>
</f:view>

UserSupport クラスにはuser、getter と setter およびその他のメソッドを含むフィールドがあります。これは、Session スコープを持つ Spring Bean です。

キャンセルを押すと、jsf が入力からの値をユーザー オブジェクトに保存しようとするが、ユーザー オブジェクトが null であるため、NPE が表示されます。

これを行う正しい方法は何ですか?

4

1 に答える 1

1

キャンセルボタンセットでimmediate="true" これにより、すべての「不要な」フェーズがスキップされます。

ただし、「作成」ボタンでも同じ問題が発生するため、immediateそこでは使用しないでください。userコンストラクターで、または@PostConstruct初期化アクションを実行するメソッドの注釈を使用して、プロパティをより適切に初期化します。

于 2009-12-17T15:22:16.677 に答える