1. 程式人生 > >兩級聯動下拉框的簡單實現

兩級聯動下拉框的簡單實現

最近經常用到二級選單的情況,改變一個另一個跟著變化。自己寫了一個簡單的JSP頁面,大家給點意見,另外大家這種情況都是怎麼做的,當然Ajax除外!

[code]<%!
public final String _JS_GET_METHOD_NAME="_do_get_second";
public final String _JS_ONE_ARRAY_NAME = "_js_one_array_name";
public final String _JS_TWO_ARRAY_NAME = "_js_two_array_name";
public final String _STYLE_WIDTH = "100";
public final String _PARAM_FORM_NAME = "cmForm";
public final String _TWO_DEFAULT_TEXT = "";
public class MenuGenParamObject{
private String paraFormName=_PARAM_FORM_NAME;
private String paramOneIdField;
private String paramOneNameField;
private String paramLinkField;
private String paramTwoIdField;
private String paramTwoNameField;
private String paramTwoDefaultText=_TWO_DEFAULT_TEXT;
private String paramStyleWidth=_STYLE_WIDTH;
private String paramJsOneArrayName=_JS_ONE_ARRAY_NAME;
private String paramJsTwoArrayName=_JS_TWO_ARRAY_NAME;
private String paramJsGetMethodName=_JS_GET_METHOD_NAME;
private java.util.List paramTwoArrayList;
private String paramPreJavascript = "";
private String paramPostJavascript = "";
private MenuGenParamObject(
String paramOneIdField,
String paramOneNameField,
String paramLinkField,
String paramTwoIdField,
String paramTwoNameField,
java.util.List paramTwoArrayList)
{
this.paramOneIdField=paramOneIdField;
this.paramOneNameField=paramOneNameField;
this.paramLinkField=paramLinkField;
this.paramTwoIdField=paramTwoIdField;
this.paramTwoNameField=paramTwoNameField;
this.paramTwoArrayList=paramTwoArrayList;
}
public String getParaFormName() {
return paraFormName;
}
public void setParaFormName(String paraFormName) {
this.paraFormName = paraFormName;
}
public String getParamJsGetMethodName() {
return paramJsGetMethodName;
}
public void setParamJsGetMethodName(String paramJsGetMethodName) {
this.paramJsGetMethodName = paramJsGetMethodName;
}
public String getParamJsOneArrayName() {
return paramJsOneArrayName;
}
public void setParamJsOneArrayName(String paramJsOneArrayName) {
this.paramJsOneArrayName = paramJsOneArrayName;
}
public String getParamJsTwoArrayName() {
return paramJsTwoArrayName;
}
public void setParamJsTwoArrayName(String paramJsTwoArrayName) {
this.paramJsTwoArrayName = paramJsTwoArrayName;
}
public String getParamLinkField() {
return paramLinkField;
}
public void setParamLinkField(String paramLinkField) {
this.paramLinkField = paramLinkField;
}
public String getParamOneIdField() {
return paramOneIdField;
}
public void setParamOneIdField(String paramOneIdField) {
this.paramOneIdField = paramOneIdField;
}
public String getParamOneNameField() {
return paramOneNameField;
}
public void setParamOneNameField(String paramOneNameField) {
this.paramOneNameField = paramOneNameField;
}
public String getParamStyleWidth() {
return paramStyleWidth;
}
public void setParamStyleWidth(String paramStyleWidth) {
this.paramStyleWidth = paramStyleWidth;
}
public java.util.List getParamTwoArrayList() {
return paramTwoArrayList;
}
public void setParamTwoArrayList(java.util.List paramTwoArrayList) {
this.paramTwoArrayList = paramTwoArrayList;
}
public String getParamTwoIdField() {
return paramTwoIdField;
}
public void setParamTwoIdField(String paramTwoIdField) {
this.paramTwoIdField = paramTwoIdField;
}
public String getParamTwoNameField() {
return paramTwoNameField;
}
public void setParamTwoNameField(String paramTwoNameField) {
this.paramTwoNameField = paramTwoNameField;
}
public void setParamTwoDefaultText(String paramTwoDefaultText){
this.paramTwoDefaultText=paramTwoDefaultText;
}
public String getParamTwoDefaultText(){
return this.paramTwoDefaultText;
}
public void setParamPreJavascript(String paramPreJavascript){
this.paramPreJavascript=paramPreJavascript;
}
public String getParamPreJavascript(){
return this.paramPreJavascript;
}
public void setParamPostJavascript(String paramPostJavascript){
this.paramPostJavascript=paramPostJavascript;
}
public String getParamPostJavascript(){
return this.paramPostJavascript;
}
}

public void _genMenuList(MenuGenParamObject obj,java.io.Writer out){
try{
out.write("<script language=\"javascript\">\n");
out.write("<!--\n");
out.write(obj.getParamPreJavascript());
out.write("var "+obj.getParamJsTwoArrayName()+" = new Array("+obj.getParamTwoArrayList().size()+");\n");
java.util.HashMap _local = null;
for (int i=0;i<obj.getParamTwoArrayList().size();i++)
{
_local = (java.util.HashMap)obj.getParamTwoArrayList().get(i);
out.write(obj.getParamJsTwoArrayName()+"["+i+"] = new Array(3);\n");
out.write(obj.getParamJsTwoArrayName()+"["+i+"][0] = '"+_local.get(obj.getParamTwoIdField())+"';\n");
out.write(obj.getParamJsTwoArrayName()+"["+i+"][1] = '"+_local.get(obj.getParamTwoNameField())+"';\n");
out.write(obj.getParamJsTwoArrayName()+"["+i+"][2] = '"+_local.get(obj.getParamLinkField())+"';\n");
}
out.write("function "+obj.getParamJsGetMethodName()+"(){\n");
out.write("firstid = "+obj.getParaFormName()+"."+obj.getParamOneIdField()+".options["+obj.getParaFormName()+"."+obj.getParamOneIdField()+".selectedIndex].value;\n");
out.write("a = "+obj.getParaFormName()+"."+obj.getParamTwoIdField()+".length;\n");
out.write("for (i=0;i<a;i++){\n");
out.write(obj.getParaFormName()+"."+obj.getParamTwoIdField()+".remove(0);\n");
out.write("}\n");
out.write("op = new Option();\n");
out.write("op.text=\""+obj.getParamTwoDefaultText()+"\";\n");
out.write("op.value=\"\";\n");
out.write(obj.getParaFormName()+"."+obj.getParamTwoIdField()+".add(op);\n");
out.write("if (firstid==0){\n");
out.write("return;\n");
out.write("}\n");
out.write("for (i=0;i<"+obj.getParamJsTwoArrayName()+".length;i++){\n");
out.write("if ("+obj.getParamJsTwoArrayName()+"[i][2]==firstid)\n");
out.write("{\n");
out.write("op1 = new Option();\n");
out.write("op1.value = "+obj.getParamJsTwoArrayName()+"[i][0];\n");
out.write("op1.text = "+obj.getParamJsTwoArrayName()+"[i][1];\n");
out.write(obj.getParaFormName()+"."+obj.getParamTwoIdField()+".options.add(op1);\n");
out.write("}\n");
out.write("}\n");
out.write(obj.getParaFormName()+"."+obj.getParamTwoIdField()+".style.width="+obj.getParamStyleWidth()+";\n");
out.write("}\n");
out.write(obj.getParamPostJavascript());
out.write("//-->\n");
out.write("</script>\n");
}catch(Exception ex)
{
}
}
public java.util.List _getTwoMenuList(
java.util.List twoList,
String parentid,
String linkField,
String twoIdField,
String twoNameField){
java.util.HashMap _local = null;
String linkValue = "";
java.util.List ret = new java.util.ArrayList();
for (int i=0;i<twoList.size();i++)
{
_local = (java.util.HashMap)twoList.get(i);
linkValue = "" + _local.get(linkField);
if (parentid.equals(linkValue))
{
ret.add(_local);
}
}
return ret;
}
%>
<!--以下為測試程式碼-->
<%
java.util.List paramOneArrayList = new java.util.ArrayList();
java.util.Map a = new java.util.HashMap();
a.put("compid","1");
a.put("compname","公司一");

java.util.Map b = new java.util.HashMap();
b.put("compid","2");
b.put("compname","公司二");

java.util.Map c = new java.util.HashMap();
c.put("compid","3");
c.put("compname","公司三");
paramOneArrayList.add(a);
paramOneArrayList.add(b);
paramOneArrayList.add(c);

java.util.List paramTwoArrayList = new java.util.ArrayList();
java.util.Map a1 = new java.util.HashMap();
a1.put("compid","1");
a1.put("deptid","10");
a1.put("deptname","行政部");

java.util.Map b1 = new java.util.HashMap();
b1.put("compid","1");
b1.put("deptid","20");
b1.put("deptname","財務部");

java.util.Map c1 = new java.util.HashMap();
c1.put("compid","2");
c1.put("deptid","30");
c1.put("deptname","市場部");

paramTwoArrayList.add(a1);
paramTwoArrayList.add(b1);
paramTwoArrayList.add(c1);
MenuGenParamObject obj = new MenuGenParamObject("compid","compname","compid","deptid","deptname",paramTwoArrayList);
_genMenuList(obj,out);
%>
<form name="<%=_PARAM_FORM_NAME%>">
公司名稱<select name="compid" onchange="<%=_JS_GET_METHOD_NAME%>();" style="width:100">
<option value=""></option>
<option value="1">公司一</option>
<option value="2">公司二</option>
<option value="3">公司三</option>
</select>
部門名稱
<select name="deptid" style="width:<%=_STYLE_WIDTH%>">
</select>
</form>[/code]

設計添加了paramPreJavascript和paramPostJavascript,怎麼有點兒Around AOP的感覺!