数字を取得する入力場所があります。空として表示したい。ただし、プログラムを実行すると、デフォルトで0または0.00になります。どうすれば空にすることができますか?
4 に答える
これは、ラッパー表現ではなくプリミティブに値をバインドした場合に発生します。プリミティブint
は常にデフォルト0
で、プリミティブdouble
は常にデフォルトで0.0
。Integer
代わりにまたは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
しないように指示する必要があります(意図せずにタイプを処理しているように見えます)それらはプリミティブです):0
0.0
Number
Number
-Dorg.apache.el.parser.COERCE_TO_ZERO=false
参照:
私は以前の回答に同意しませんが、あなたが探しているかもしれないと思います
<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+
inputTextの代わりにprimefaces-extensionでinputNumberを使用できます。このような
<pe:inputNumber />
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を取得しなくなります。