论坛首页 Java企业应用论坛

T5 技巧 1:解决Form的提交乱码问题。

浏览 16386 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-08-22  
引用
确定你的html 和 java 文件的编码用的是utf-8? eclipse的话 在文件上右键 ---》 然后properties。

.java, .html采用UTF-8
数据库utf-8
环境: WindowsXP + mysql5.0.18 + jetty5.1.12

乱码依旧:(

0 请登录后投票
   发表时间:2007-08-22  
koda 写道
引用
确定你的html 和 java 文件的编码用的是utf-8? eclipse的话 在文件上右键 ---》 然后properties。

.java, .html采用UTF-8
数据库utf-8
环境: WindowsXP + mysql5.0.18 + jetty5.1.12

乱码依旧:(



jetty5.1.14. mysql5. 在ubuntu 和windows xp下就没问题。。  呵呵  RP有问题。
0 请登录后投票
   发表时间:2007-08-22  
要记得清除开发环境和浏览器的缓存。
0 请登录后投票
   发表时间:2007-08-23  
引用
要记得清除开发环境和浏览器的缓存。

都清除了,也换成了jetty5.1.14. 问题依旧,绝望了:(
0 请登录后投票
   发表时间:2007-08-23  
那就奇怪了。我的开发环境是:XPsp2+mysql5(utf8)+eclipse3.3+jetty6.1.3+tapestry5.0.5
在form中输入中文提交后,中文显示正常。
0 请登录后投票
   发表时间:2007-08-23  
koda 写道
引用
要记得清除开发环境和浏览器的缓存。

都清除了,也换成了jetty5.1.14. 问题依旧,绝望了:(


很有可能你的mysql数据库不是用的utf-8.

你可以调试下   在你onSuccess里面看看 提交后的java class的数据是不是乱码。
0 请登录后投票
   发表时间:2007-08-23  
我在onSuccess里面插入数据库之前打印就是乱码
另外我创建数据库的时候用下面的语句
CREATE DATABASE bogo CHARACTER SET UTF8 COLLATE utf8_general_ci;

0 请登录后投票
   发表时间:2007-08-23  
代码也贴出来
package org.opend.bogo.services;

public class AppModule {
	public void contributeRequestHandler(
			OrderedConfiguration<RequestFilter> configuration,
			@InjectService("TimingFilter")
			final RequestFilter timingFilter, @InjectService("Utf8Filter")
			final RequestFilter utf8Filter) {
		configuration.add("Utf8Filter", utf8Filter); // handle UTF-8
	}

    public RequestFilter buildUtf8Filter(
            @InjectService("RequestGlobals") final RequestGlobals requestGlobals)
        {
            return new RequestFilter()
            {
                public boolean service(Request request, Response response, RequestHandler handler)
                    throws IOException
                {
                    requestGlobals.getHTTPServletRequest().setCharacterEncoding("utf-8");
                    return handler.service(request, response);
                }
            };
        }
}
0 请登录后投票
   发表时间:2007-08-24  
我贴下我的吧。。  跟你的也差不多。。


java 代码
 
  1. package com.javaeye.dengyin2000.gtts.services;  
  2.   
  3. import java.io.IOException;  
  4. import java.math.BigDecimal;  
  5.   
  6. import org.apache.commons.logging.Log;  
  7. import org.apache.tapestry.Translator;  
  8. import org.apache.tapestry.ioc.MappedConfiguration;  
  9. import org.apache.tapestry.ioc.OrderedConfiguration;  
  10. import org.apache.tapestry.ioc.ServiceBinder;  
  11. import org.apache.tapestry.ioc.annotations.InjectService;  
  12. import org.apache.tapestry.services.Request;  
  13. import org.apache.tapestry.services.RequestFilter;  
  14. import org.apache.tapestry.services.RequestGlobals;  
  15. import org.apache.tapestry.services.RequestHandler;  
  16. import org.apache.tapestry.services.Response;  
  17.   
  18. import com.javaeye.dengyin2000.gtts.tapestry.BigDecimalTranslator;  
  19.   
  20. /** 
  21.  * This module is automatically included as part of the Tapestry IoC Registry, it's a good place to 
  22.  * configure and extend Tapestry, or to place your own service definitions. 
  23.  */  
  24. public class AppModule  
  25. {  
  26.     public static void bind(ServiceBinder binder)  
  27.     {  
  28.         // binder.bind(MyServiceInterface.class, MyServiceImpl.class);  
  29.           
  30.         // Make bind() calls on the binder object to define most IoC services.  
  31.         // Use service builder methods (example below) when the implementation  
  32.         // is provided inline, or requires more initialization than simply  
  33.         // invoking the constructor.    
  34.     }  
  35.       
  36.       
  37.     public static void contributeApplicationDefaults(  
  38.             MappedConfiguration<String, String> configuration)  
  39.     {  
  40.         // Contributions to ApplicationDefaults will override any contributions to  
  41.         // FactoryDefaults (with the same key). Here we're restricting the supported  
  42.         // locales to just "en" (English). As you add localised message catalogs and other assets,  
  43.         // you can extend this list of locales (it's a comma seperated series of locale names;  
  44.         // the first locale name is the default when there's no reasonable match).  
  45.           
  46.         configuration.add("tapestry.supported-locales""en");  
  47.     }  
  48.       
  49.   
  50.     /** 
  51.      * This is a service definition, the service will be named "TimingFilter". The interface, 
  52.      * RequestFilter, is used within the RequestHandler service pipeline, which is built from the 
  53.      * RequestHandler service configuration. Tapestry IoC is responsible for passing in an 
  54.      * appropriate Log instance. Requests for static resources are handled at a higher level, so 
  55.      * this filter will only be invoked for Tapestry related requests. 
  56.      *  
  57.      * <p> 
  58.      * Service builder methods are useful when the implementation is inline as an inner class 
  59.      * (as here) or require some other kind of special initialization. In most cases, 
  60.      * use the static bind() method instead.  
  61.      *  
  62.      * <p> 
  63.      * If this method was named "build", then the service id would be taken from the  
  64.      * service interface and would be "RequestFilter".  Since Tapestry already defines 
  65.      * a service named "RequestFilter" we use an explicit service id that we can reference 
  66.      * inside the contribution method. 
  67.      */      
  68.     public RequestFilter buildTimingFilter(final Log log)  
  69.     {  
  70.         return new RequestFilter()  
  71.         {  
  72.             public boolean service(Request request, Response response, RequestHandler handler)  
  73.                     throws IOException  
  74.             {  
  75.                 long startTime = System.currentTimeMillis();  
  76.   
  77.                 try  
  78.                 {  
  79.                     // The reponsibility of a filter is to invoke the corresponding method  
  80.                     // in the handler. When you chain multiple filters together, each filter  
  81.                     // received a handler that is a bridge to the next filter.  
  82.                       
  83.                     return handler.service(request, response);  
  84.                 }  
  85.                 finally  
  86.                 {  
  87.                     long elapsed = System.currentTimeMillis() - startTime;  
  88.   
  89.                     log.info(String.format("Request time: %d ms", elapsed));  
  90.                 }  
  91.             }  
  92.         };  
  93.     }  
  94.   
  95.     public RequestFilter buildUtf8Filter(  
  96.             @InjectService("RequestGlobals"final RequestGlobals requestGlobals)  
  97.         {  
  98.             return new RequestFilter()  
  99.             {  
  100.                 public boolean service(Request request, Response response, RequestHandler handler)  
  101.                     throws IOException  
  102.                 {  
  103.                     requestGlobals.getHTTPServletRequest().setCharacterEncoding("UTF-8");  
  104.                     return handler.service(request, response);  
  105.                 }  
  106.             };  
  107.         }      
  108.       
  109.     /** 
  110.      * This is a contribution to the RequestHandler service configuration. This is how we extend 
  111.      * Tapestry using the timing filter. A common use for this kind of filter is transaction 
  112.      * management or security. 
  113.      */  
  114.     public void contributeRequestHandler(OrderedConfiguration<RequestFilter> configuration,  
  115.             @InjectService("TimingFilter")  
  116.             RequestFilter filter, @InjectService("Utf8Filter") RequestFilter utf8Filter)  
  117.     {  
  118.         // Each contribution to an ordered configuration has a name, When necessary, you may  
  119.         // set constraints to precisely control the invocation order of the contributed filter  
  120.         // within the pipeline.  
  121.         configuration.add("Utf8Filter", utf8Filter);  
  122.         configuration.add("Timing", filter);  
  123.           
  124.     }  
  125.       
  126.     public static void contributeTranslatorDefaultSource(  
  127.             MappedConfiguration<Class, Translator> configuration)  
  128.     {  
  129.         configuration.add(BigDecimal.classnew BigDecimalTranslator());  
  130.     }  
  131.       
  132.     public static void contributeTranslatorSource(  
  133.             MappedConfiguration<String, Translator> configuration)  
  134.     {  
  135.         configuration.add("bigdecimal",  new BigDecimalTranslator());  
  136.     }  
  137. }  
0 请登录后投票
   发表时间:2007-08-28  
我终于找到了问题发生的原因了!!!但是没有解决方案

真正的问题是:如果form里包含有上传文件的field,则其他textfield提交的中文乱码;或者,如果显式地在<form>标签中加入属性 enctype="multipart/form-data"则提交的textfield中文值乱码。

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics