文本框输入字母检索汉字

这个东西我弄了好几天,最后还是请教了同时才弄出来的

上图,先看效果

 

上面是效果  下面先说一下 思路    上图检索的文本框是 客户简称    我们首先需要在数据库里面有一个 客户简称 的字段,还需要 在新增客户的时候把输入的客户简称 自动转换成字母  如  张福宁  转换成zfn     , 张F宁  转换成  zfn    , zfn 转换成 zfn  输入的是数字或者是符号的话  就页面判断下别叫客户输入了

先说下  汉字转换为字母

struts2的框架

转换类

package com.erp.hanzizhuanpinyin.impl;

import java.io.UnsupportedEncodingException;

public class StringUtil {

// 国标码和区位码转换常量

int GB_SP_DIFF = 160;
//存放国标一级汉字不同读音的起始区位码

int[] secPosValueList = {
     1601, 1637, 1833, 2078, 2274, 2302, 2433, 2594, 2787,
     3106, 3212, 3472, 3635, 3722, 3730, 3858, 4027, 4086,
     4390, 4558, 4684, 4925, 5249, 5600};
//存放国标一级汉字不同读音的起始区位码对应读音

char[] firstLetter = {
     'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j',
     'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
     't', 'w', 'x', 'y', 'z'};
public char convert(String ch) {
     byte[] bytes=new byte[2];
     try {
      bytes = ch.getBytes("GB2312");
     } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
     }
     char result = '-';
     int secPosValue = 0;
     int i;
     for (i = 0; i < bytes.length; i++) {
     bytes[i] -= GB_SP_DIFF;
    }
     secPosValue = bytes[0] * 100 + bytes[1];
     for (i = 0; i < 23; i++) {
     if (secPosValue >= secPosValueList[i] && secPosValue < secPosValueList[i + 1]) {
     result = firstLetter[i];
     break;
    }
    }
    return result;
}




}
在添加客户的action上    插入转换的字母  这个字段

public String addKehu() throws Exception{	
		StringUtil s=new StringUtil ();
		String b=null;
		String name=null;
		String f_py="";
		k.setF_khname(f_khname);
		k.setF_khjc(f_khjc);
		
		//把用户简称转换为字母
		char[] khjc = f_khjc.toCharArray();
		
		for(int j=f_khjc.length()-1;j>=0;j--){
		
		if(khjc[j] >= 0x0391 && khjc[j] <= 0xFFE5)  //中文字符
				{        	
		        	String a=String.valueOf(f_khjc.charAt(j))  ;
		        	
		        	   b =  String.valueOf(s.convert(a));
		        	   f_py=b+f_py;		
				}
		else if(khjc[j]>=0x0000 && khjc[j]<=0x00FF){
			
			String a=String.valueOf(f_khjc.charAt(j))  ;
			 f_py=a+f_py;	
		} 
		
		}
		
		
		k.setF_py(f_py);
		
		
		k.setF_adress(f_adress);
		k.setF_lianxiren(f_lianxiren);
		k.setF_phone(f_phone);
		k.setF_yewuyuan(f_yewuyuan);
		k.setF_isorno(f_isorno);
		int num=kehu.insertKehu(k);
		if(num>0){
			return "kehuList";
			
		}else{
			return"";
		}

	}


很简单,自己看下就行,这样把汉字转换为字母了 

下面再说下  ajax 实现 拼音检索汉字 

先写一个javabean类    根据拼音查询汉字

public List<String> select(String f_py){
				List<String> al=new LinkedList<String>();
                String sql=null;
				try{
					conn=ConnectionManager.getConnection();

					sql="select f_khjc from t_kehu where f_py like '%"+f_py+"%'";
					
					titleQuery=conn.prepareStatement(sql);
				    results=titleQuery.executeQuery();
					
					while(results.next()){
						al.add(results.getString("f_khjc"));
					}
				}catch(Exception ex){
				}finally{
					 ConnectionManager.closeResultSet(results);
					 ConnectionManager.closeStatement(titleQuery);
					 ConnectionManager.closeConnection(conn);
				}
				return al;
			}


ajax写的js文件

var xmlHttp;
//判断浏览器的类型
function createXMLHttpRequest(){    
	if(window.ActiveXObject){
		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	}else if(window.XMLHttpRequest){
		xmlHttp = new XMLHttpRequest();
	}
}

function validation(url){
    createXMLHttpRequest();
    //var birthDate = 11;  
    xmlHttp.open("get",url,true);
    xmlHttp.onreadystatechange = callBack;            
    xmlHttp.send(null);
}

function callBack() {
	if(xmlHttp.readyState == 4)
	{
        if(xmlHttp.status == 200)
        {       
        	var rsStr=xmlHttp.responseText;
        	var selectlist=document.getElementById("ListBox1");
        	var strs=rsStr.split(",");
        	selectlist.options.length=0;
        	for (i=0;i<strs.length;i++){
        		selectlist.options.add(new Option(strs[i],strs[i]));
        	}
        	if (strs.length>0)
        		document.getElementById("namelistdiv").style.display="";
            //document.getElementById("ToolitHtmlTD").innerHTML = xmlHttp.responseText;
        }
    }
}


 

写一个servlet    我这里写的jsp    代码是一样的  只是我这里调用的jsp  没有调用 servlet

<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="com.erp.xitonggl.user.impl.*" %>
<%@ page import="java.util.List" %>
<%

  	response.setContentType("text/xml; charset=UTF-8");
	response.setHeader("Cache-Control", "no-cache");
	
  	String khj=request.getParameter("f_khname").toString();
  	List ls=new KehuImpl().select(khj);
  	for (int i=0;i<ls.size();i++){
  		out.println(ls.get(i).toString()+",");	
  	}
  	out.flush();
%>


jsp 页面

<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  	<link href="css/style.css" rel="stylesheet" type="text/css" />
    <base href="<%=basePath%>">
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<script language="javascript" type="text/javascript" src="js/javaAJAX.js"></script>
  </head>
  <body οnclick="setdisplay()">
  		<div class="divStyleBorder" style="height:30px;" id="divtop">
  			<input type="text"  onKeyUp="get_khjc()" style="width:400px" id="kehujc" name="kehujc"/>
    	</div>
    	
    	<div style="display:none;z-index:9999;position: absolute; left:111; top:110px; width:410px; height:210px"  id="namelistdiv" name="namelistdiv">
			<select size="10" οnclick="selectvalue()" name="ListBox1" id="ListBox1" style="height:100%;width:100%; border-bottom: #ffffff 0px solid;">
			</select>
		</div>
  </body>
</html>
<script type="text/javascript">
	function getAbsPoint(e) {
    	var x = e.offsetLeft;
    	var y = e.offsetTop;
    	while (e = e.offsetParent) {
        	x += e.offsetLeft;
        	y += e.offsetTop;
    	}
    	return { "x": x, "y": y };
	}
	function get_khjc(){
		xy=getAbsPoint(document.getElementById("divtop"));
		document.getElementById("namelistdiv").style.top=xy.x+35+'px';
		document.getElementById("namelistdiv").style.left=xy.y-6+'px';
		//alert(window.event.keyCode);
		//var url="kehuName?khjc="+document.getElementById("kehujc").value;
		var url="MyJsp.jsp?khjc="+document.getElementById("kehujc").value;
		validation(url);
	}
	function selectvalue()
	{
		document.all.kehujc.value=document.all.ListBox1.value;
	}
	function setdisplay(){
		if (window.event.srcElement.tagName.toUpperCase() == "BODY")
			document.all.ListBox1.style.display='none';
	}
</script>


ok  全部代码

 

 

 

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值