8

ユーザーがフィールドからフォーカスを移動したときに、JSF inputText フィールドを大文字にしたいと考えています。f:ajaxタグを使用してこれを行い、blurイベントによってサーバーへの呼び出しをトリガーして大文字化を行うのが最善でしょうか、それとも JavaScript でこれを行うのが最善でしょうか? JavaScript でこれを行わない理由は何でしょうか? サーバー側へのajax呼び出しを使用して、常にこの種のことを行うのが最善ですか?

4

3 に答える 3

30

これを救うには確かに2つの方法があります。

  1. JavaScriptを使用します。

    <h:inputText ... onblur="value=value.toUpperCase()" />
    
  2. JSFを使用します。

    <h:inputText ... converter="toUpperCaseConverter">
        <f:ajax event="blur" render="@this" />
    </h:inputText>
    

    @FacesConverter("toUpperCaseConverter")
    public class ToUpperCaseConverter implements Converter {
    
        @Override
        public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) {
            return (submittedValue != null) ? submittedValue.toUpperCase() : null;
        }
    
        @Override
        public String getAsString(FacesContext context, UIComponent component, Object modelValue) {
            return (modelValue != null) ? modelValue.toString() : "";
        }
    
    }
    

JSのアプローチは非常に単純です。ただし、これは、エンドユーザーの完全な制御下でクライアント側で完全に実行されるため、エンドユーザーによって改ざんされる可能性があります。エンドユーザーは、実際にサーバー側に送信される前に、そのJSコードを無効化/スキップしたり、リクエストパラメーターを編集したりできます。JSFアプローチはサーバー側で完全に実行されるため、改ざん可能ではありません。そのため、より確実で信頼性の高い結果が得られます。

これらの事実に基づいて、ビジネス要件に最適なものを決定する必要があります。

于 2012-06-13T22:29:51.877 に答える
3

これを使用してください:style="text-transform: uppercase"、それは私の仕事です。そして、あなたが使用する任意のフラットフォームで動作します:)単純なことに複雑な方法を使用する必要はないと思います。

于 2013-03-15T07:22:43.570 に答える