8

当用户将焦点从字段移开时,我想将 JSF inputText 字段设为大写。最好使用f:ajax标记来执行此操作并让blur事件触发对服务器的调用以进行大写,还是最好在 JavaScript 中执行此操作?在 JavaScript 中这样做的原因是什么?最好总是使用对服务器端的 ajax 调用来做这些事情吗?

4

3 回答 3

30

确实有两种方法可以挽救这一点。

  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 回答
2

我建议将 BalusC 和 BlackKat 提供的解决方案结合起来:

<h:inputText ... onblur="value=value.toUpperCase()" style="text-transform: uppercase" />

在这种情况下,您甚至不会在输入时看到任何小写字母(BlackKat 解决方案的优势),并且提交的值将是大写的(BalusC 解决方案的优势)

于 2020-01-21T12:14:39.627 回答