15

に設定required="true"すると<h:inputText>、まだ空白が許可されます。変更しようとしましたjsf-api.jarが、新しいJARを生成する方法がわからなかったため、クラスisEmpty()からメソッドを変更してコンパイルし、を開いて新しいものに置き換えようとしましたが、機能しませんでした。UIInputjsf-api.jar

私が必要なのは、ユーザーが空白を許可しないようにtrim()書き込みを行うときに行うことです。<h:inputText>どうすればこれを達成できますか?

jsf-api.jarリソースをダウンロードしたい場合は、それを行うことができます。http: //javaserverfaces.java.net/checkout.htmlで方法を読んでください。

4

2 に答える 2

43

これは通常の自然な動作であり、JSF 固有ではありません。空白は完全に有効な入力である可能性があります。はrequired="true"、入力された入力ではなく、空の入力でのみ開始されます。ただし、JSF では、ConverterforStringクラスを作成して空白を自動的に削除することができます。

@FacesConverter(forClass=String.class)
public class StringTrimmer implements Converter {

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        return value != null ? value.trim() : null;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        return (String) value;
    }

}

このクラスをプロジェクトのどこかに配置します。のおかげで自動的に登録され、のおかげでエントリ@FacesConverterごとに自動的に呼び出されます。StringforClass=String.class

JSF API/impl をハックする必要はありません。これは意味がありません。

于 2011-11-30T14:54:23.057 に答える
9

標準的な JSF の動作として BalusC が回答の 1 つとして指摘する動作をオフにしたい場合は、web.xml を変更して以下を含めることができます。

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

これにより、JSF フレームワークがトリガーされ、nullBalusC からの回答に代わる、望ましい値が検討されます。

于 2012-12-10T18:24:11.240 に答える