1

私は示されているように豆を持っています

@ManagedBean
@RequestScoped
public class Demo {
private int value1;
private String value2;

..getter and setter..

これは私の xhtml ページ demo.xhtml です

<h:form>
        <p:panelGrid columns="2">
        <p:outputLabel value="id"></p:outputLabel>
        <p:inputText value="#{demo.value1}"></p:inputText>
        <p:outputLabel value="name"></p:outputLabel>
        <p:inputText value="#{demo.value2}"></p:inputText>
        </p:panelGrid>
    </h:form>

クライアントページで整数値が0の値を取得する方法 ここに画像の説明を入力

リクエスト処理ライフサイクルで、初めてのリクエストで、jsf ランタイムが新しいビューを作成し、直接レンダリング フェーズに進むことを読みました。プロセス検証フェーズなしでクライアント ページに値を設定する方法。

私はjsf 2.0完全リファレンスからこれらの行を読みました

*Initial request to view the register.xhtml page

Since this
is an initial request (also referred to as a “non-postback” request) to view the
registration page, the Restore View phase creates an empty View (UIViewRoot)
component tree and stores it in the FacesContext instance.

ビューが作成されると、ライフサイクルはすぐに応答のレンダリング フェーズに直接進みます。これは、検証または処理する要求 (「非ポストバック」要求とも呼ばれます) に着信フィールド データがないためです。*

この文は私の質問を理解するのに役立つと思います. ライフサイクルの観点から答えを期待する

4

4 に答える 4

9

最初の問題は、intnull にすることはできず、プリミティブであることです。代わりに整数を使用してください。

あなたの意志に従うと、ここにあるいくつかの投稿に関連する問題が発生しますCOERCE_TO_ZERO

この動作を防ぐには、web.xmlのコンテキスト パラメータjavax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULLを true に設定します。

<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>

さらに、Tomcat の起動スクリプトに VM パラメータを追加する必要がある場合があります。 -Dorg.apache.el.parser.COERCE_TO_ZERO=false

このトピックについては、ウェブ上にいくつかの優れた記事があります

于 2013-09-26T06:12:15.480 に答える
1

intこれは、フィールドのデフォルト値が であるために発生します0。詳細については、こちらの Java 言語仕様を参照してください。

空のフィールドを表示したい場合Integerは、シンプル タイプの代わりにラッパー タイプを使用する必要がありますint。このように、フィールドの初期値は null になり、空のフィールドとして表示されます。

于 2013-09-26T06:12:12.757 に答える