• jsf初学解决faces 中文输入乱码问题


    转载自:http://www.cnblogs.com/xxtkong/p/3501944.html

    中文乱码,貌似在java里很常见,请看简单代码:

    很简单的faces

    <div class="td-block">
                            <h:outputLabel class="first-td fl">测试取值:</h:outputLabel> 
                            <h:inputText value="#{summary.title}"  >
                               
                            </h:inputText>
    </div>
    
     <h:commandButton value="查询" class="btn-12" action="#{summary.search()}">
    </h:commandButton>
    

     bean

    private String title;
        
        public String search()
        {
            if(i==2)
            {
                return "ok";
            }
            if(title.equals("一本书"))
            return "ok";
            else{
                return "false";
            }
            
        }
    
        /**
         * @return the title
         */
        public String getTitle() {
            return  title;
        }
    
        /**
         * @param title the title to set
         */
        public void setTitle(String title) {
            
            this.title = title;
        }

    当输入中文 在获取输入值时始终是乱码,各种解决不行。。

    后来看到一篇文章(具体文章不记得)使用转换器。

    在看使用转换器具体实现:

    package com.cnpdx;
    
    import java.io.UnsupportedEncodingException;
    import javax.faces.component.UIComponent;
    import javax.faces.component.UIInput;
    import javax.faces.context.FacesContext;
    import javax.faces.convert.Converter;
    import javax.faces.convert.ConverterException;
    
    /**
     *
     * @author taoxy
     */
    public class StringConverter implements Converter{
    
        /**
         *
         * @param context
         * @param component
         * @param newValues
         * @return
         * @throws ConverterException
         */
        @Override
       public Object getAsObject(FacesContext context, UIComponent component,String newValues) throws ConverterException {
            String newstr = "";
            if (newValues == null) {
                    newValues = "";
              }
              byte[] byte1 = null;
              try {
               byte1 = newValues.getBytes("ISO-8859-1");
               newstr = new String(byte1, "UTF-8");
               UIInput input=(UIInput)component;//
               input.setSubmittedValue(newstr);
              } catch (UnsupportedEncodingException e) {
               e.printStackTrace();
              }
    
              return newstr;
    
     }
    
     public String getAsString(FacesContext context, UIComponent component,
       Object Values) throws ConverterException { 
      return (String) Values;
     }
        
    }

    配置一下faces-config

    <converter>
            <converter-id>com.cnpdx.stringconverter</converter-id>
            <converter-class>com.cnpdx.StringConverter</converter-class>
        </converter>

    最后修改下faces

    修改如下:

    <div class="td-block">
                            <h:outputLabel class="first-td fl">测试取值:</h:outputLabel> 
                            <h:inputText value="#{summary.title}"  >
                                <f:converter converterId="com.cnpdx.stringconverter"></f:converter>
                            </h:inputText>
                        </div>

    OK 中文乱码问题算是解决了

  • 相关阅读:
    代码题(22)— 二叉树镜像、相同的树 、对称二叉树
    代码题(26)— 不同路径
    代码题(25)— 最大子序和、最长上升子序列
    Linux 基本命令总结
    C++(五)— 控制保留小数位数
    C++(四)— 字符串、数字翻转3种方法
    代码题(24)— 寻找重复数、数组中重复的数据、找到所有数组中消失的数字
    代码题(23)— 数组中的最长山脉
    【vue】vue +element 搭建项目,将js函数变成vue的函数
    【vue】vue +element 搭建项目,$createElement使用
  • 原文地址:https://www.cnblogs.com/zrui-xyu/p/4872329.html
Copyright © 2020-2023  润新知