欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

对于如何解决wicket Ajax 自动提示应用中出现的乱码问题!

程序员文章站 2022-07-15 15:52:56
...

弄了一个多礼拜的wicket框架,在这段期间有遇到有很多的问题,因为之前很少用到eclipse,之前都是用的Myeclipse ,netBean,JBuilder等其它的IDE工具,所以会经常出现一些小问题,像引用外部包的时候不能引用包含有中文的路径,这是在运行其它开发工具的时候没有遇到的.最麻烦的是,在学习wicket ajax控件应用中,使用AutoCompleteTextField控件会出现中文乱码,只有英文测试可以通过,对于向来不愿服输的我,在这个上面也花费了不少的时间,最后问了身边的同事,也没有解决的办法.最终也就先放在一边了.对于这样的事,也只能先记在本子上,等之后有时间翻出来整理解决.今天突然想运用这一个多礼拜的wicket学习把自己原来的一个小的购物车项目用 wicket框架来整一下,想到那个自动提示功能出现乱码还没有解决,自己又拼命的在网上搜索资料,虽说在网也找到了一些相关的资料,但无非都是要在javascript代码中作手脚,但 wicket框架的JS代码都已经封装好了,如果去改它的原来的JS文件的话,那太麻烦了,况且我也不一定就认为我能改的好,所以这个方案取消.只能另选一条方案,在java代码作手脚了,想到在测试的时候在进行表单提交的时候在控制台可以输出文本框中的内容,而且不会出现乱码.这时想到了,为什么不在将在JS代码中处理的部分转移到java代码中来进行呢?也就是说,我可以在加入一个表单提交句柄的基础上来进行操作.果然效果和我预想一样,下面是原代码:下面的红色代码部分是进行更改后的结果.
AutoCompletePage .java
    
package com.sfkong.ajax.auto;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteTextField;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.util.string.Strings;

import com.sfkong.ajax.IndexPage;
public class AutoCompletePage extends WebPage {
 private String name;
 private List choices=new ArrayList(10);
 private String inputName="";
 public List getChoices() {
  return choices;
 }
 public void setChoices(List choices) {
  this.choices = choices;
 }
 public String getInputName() {
  return inputName;
 }
 public void setInputName(String inputName) {
  this.inputName = inputName;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public AutoCompletePage() {
  super();
  this.add(new BookmarkablePageLink("back", IndexPage.class).setAutoEnable(true));
  
  Form form =new Form ("form",new CompoundPropertyModel(this)){
   @Override
   protected void onSubmit() {    
    super.onSubmit();
   }
  };
  add(form);
  
    final AutoCompleteTextField textField=new AutoCompleteTextField("ac",new PropertyModel(this,"inputName")){
   
   @Override
   protected Iterator getChoices(String input) {
       if(Strings.isEmpty(input)){
     return Collections.EMPTY_LIST.iterator();
    }
       return choices.iterator();
   }
  };
  final Label label=new Label("label",textField.getDefaultModel());
  label.setOutputMarkupId(true);
  textField.add(new AjaxFormSubmitBehavior(form,"onkeyup"){
   @Override
   protected void onError(AjaxRequestTarget arg0) {
    // TODO Auto-generated method stub
    
   }
   @Override
   protected void onSubmit(AjaxRequestTarget target) {
    Locale[] locales=Locale.getAvailableLocales();
    for (Locale locale : locales) {
     System.out.print(locale.getDisplayCountry()+",");
    }
    choices.clear();
    for (int i = 0; i < locales.length; i++) {
     final Locale locale=locales[i];
     final String country=locale.getDisplayCountry(Locale.ENGLISH);     
        if(inputName!=null){
     if(country.toUpperCase().startsWith(inputName.toUpperCase())){
      choices.add(country);
      if (choices.size()==10) {
       break;
      }
     }
     }
    }

    target.addComponent(label);

   }
  });
  
  form.add(textField);
  form.add(label);
 }
}

 
AutoCompletePage .html
<body>
<a href="IndexPage.html" wicket:id="back">[back]</a><br>
 <form wicket:id="form">
 你所得到的字符是:<span wicket:id="label"></span><br/>
  Country:
  <input type="text" wicket:id="ac" size="50"/>
 </form>
</body>
</html>
 
其实想想wicket在进行submit的时候能得到想要的结果,为什么在 JS代码部分却会出现乱码呢?
有时间的朋友可以去解答一下哦!
当然还有一个Application.因为比较简单就不提供代码了.