这个东西我弄了好几天,最后还是请教了同时才弄出来的
上图,先看效果
上面是效果 下面先说一下 思路 上图检索的文本框是 客户简称 我们首先需要在数据库里面有一个 客户简称 的字段,还需要 在新增客户的时候把输入的客户简称 自动转换成字母 如 张福宁 转换成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 全部代码