9

数字を取得する入力場所があります。空として表示したい。ただし、プログラムを実行すると、デフォルトで0または0.00になります。どうすれば空にすることができますか?

4

4 に答える 4

21

これは、ラッパー表現ではなくプリミティブに値をバインドした場合に発生します。プリミティブintは常にデフォルト0で、プリミティブdoubleは常にデフォルトで0.0Integer代わりにまたはDouble(または)を使用しますBigDecimal

例えば:

public class Bean {

    private Integer number;

    // ...
}

次に、フォーム送信を処理するときに考慮すべきことが2つあります。まず、JSFに、送信された空の文字列の値をとして解釈するように指示する必要がありますnull。そうしないと、ELは空の文字列を0またはに強制します0.0。これは、次のコンテキストパラメータを介して実行できますweb.xml

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

次に、Tomcat /JBossまたはApacheELパーサーを内部で使用するサーバーを使用している場合は、次のVM引数によってタイプを強制しないように、またはタイプの場合に強制nullしないように指示する必要があります(意図せずにタイプを処理しているように見えます)それらはプリミティブです):00.0NumberNumber

-Dorg.apache.el.parser.COERCE_TO_ZERO=false

参照:

于 2013-01-15T11:13:14.897 に答える
2

私は以前の回答に同意しませんが、あなたが探しているかもしれないと思います

<h:inputText id="number" binding="#{controller.inputBox}" value="#{controller.number}" >
     <f:event type="preRenderComponent" listener="#{controller.preRenderInput}" />
</h:inputText>

とコントローラーの内部

private double number; // getters and setters
private UIInput inputBox; // getters and setters
public void preRenderInput() {
        // if it is the first request
        if(!FacesContext.getCurrentInstance().isPostback()) {
            inputBox.setValue("");
        }
}

JSF 2.0+

于 2016-11-27T04:20:17.433 に答える
0

inputTextの代わりにprimefaces-extensionでinputNumberを使用できます。このような

<pe:inputNumber  />
于 2017-02-15T13:40:56.580 に答える
-5

XHTMLコードで、入力フィールドが次のようになっていると仮定します。

<h:inputText id="newname" value="#{youAction.newName}"
        style="width:130px" styleClass="form">
</h:inputText>

Managed Beanアクションクラスで、このフィールドを次のようにマップします。

@ManagedBean(name="yourAction")
public class YourAction {

   private String newName;
   ...

   // Add Getter & Setter Methods
   ... 
}

このようにすることで、入力フィールドのデフォルト値として0または0.00を取得しなくなります。

于 2013-01-15T09:28:38.407 に答える