2012-06-13 46 views
4

我想在用戶將焦點從字段移開時將JSF inputText字段變成大寫。最好是使用f:ajax標籤來做到這一點,並讓blur事件觸發服務器的調用來做大寫,或者最好在JavaScript中做到這一點?原因是不是在JavaScript中做到這一點?使用ajax調用服務器端,最好總是做這些事情?如何使JSF inputText字段大寫模糊

回答

20

確實有兩種方法可以挽救這個問題。

  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方法並不是篡改的,因爲這是在服務器端完全執行的,所以這會產生更穩定可靠的結果。

您必須根據那些最適合業務需求的事實來決定。

2

使用這個:style =「text-transform:uppercase」,它爲我工作。 並使用任何平板你使用:) 我不認爲你必須使用一個複雜的方式來這個簡單的事情。

+3

請注意,這是純粹的表示形式,因此在提交給服務器端後,其值不會在服務器端大寫。我明白OP在服務器端也需要大寫字母的值。 – BalusC

+0

感謝@BalusC和BlackKat,這種風格是我所需要的(當然,在我的代碼中也是大寫)。 – WyllianNeo