在上一章 struts2 autocompleter 例子,已经了解如何通过java列表,ongl表达生成 autocompleter 选择选项组件列表。另外,也有可能产生通过json数据选择的选择也是如此。
这里创建一个web工程:strut2autocompleterjson,来演示在多个复选框如何设置的默认值,整个项目的结构如下图所示:

在本教程中,将使用struts2的json插件将对象转换成json格式,并把它传递给autocompleter组件。
一个类用来转换成json格式,提供autocompleter组件列表的选择选项。
databasejson.java
package com.h3.common.action;
import java.util.hashmap;
import java.util.map;
import com.opensymphony.xwork2.action;
public class databasejson{
private map<string, string> databases = new hashmap<string, string>();
public databasejson(){
databases.put("mysql", "mysql");
databases.put("oracle", "oracle");
databases.put("postgresql", "postgresql");
databases.put("microsoft sql server", "microsoft sql server");
databases.put("db2", "db2");
databases.put("others", "others");
}
public string execute() {
return action.success;
}
public map<string, string> getdatabases() {
return databases;
}
public void setdatabases(map<string, string> databases) {
this.databases = databases;
}
}
一个正常的action类,只是在做重定向工作和存储autocompleter值。
autocompleteraction.java
package com.h3.common.action;
import com.opensymphony.xwork2.actionsupport;
public class autocompleteraction extends actionsupport{
private string yourdatabase;
public string display() {
return none;
}
public string getyourdatabase() {
return yourdatabase;
}
public void setyourdatabase(string yourdatabase) {
this.yourdatabase = yourdatabase;
}
}
有点棘手在这里,用“s:url”标签指向一个“databasejson”的动作,这将返回json格式的选项的列表。并经由href=”%{databaselist}”链接到autocompleter组件。
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
<html>
<head>
<sx:head />
</head>
<body>
<h1>struts 2 autocompleter + json example</h1>
<s:form action="resultaction" namespace="/" method="post" >
<s:url id="databaselist" action="databasejson" />
<sx:autocompleter label="what's your favorite database server?"
href="%{databaselist}" name="yourfavdatabase" />
<s:submit value="submit" name="submit" />
</s:form>
</body>
</html>
配置操作和json提供如下:
<?xml version="1.0" encoding="utf-8" ?>
<!doctype struts public
"-//apache software foundation//dtd struts configuration 2.0//en"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devmode" value="true" />
<package name="json" namespace="/" extends="json-default">
<action name="databasejson"
class="com.h3.common.action.databasejson">
<result type="json" >
<param name="root">databases</param>
</result>
</action>
</package>
<package name="default" namespace="/" extends="struts-default">
<action name="autocompleteraction"
class="com.h3.common.action.autocompleteraction"
method="display">
<result name="none">/pages/autocompleter-json.jsp</result>
</action>
<action name="resultaction"
class="com.h3.common.action.autocompleteraction" >
<result name="success">/pages/result.jsp</result>
</action>
</package>
</struts>
访问url的动作,现在 autocompleter 选择选项是由json数据提供。
http://localhost:8080/strut2autocompleterjson/autocompleteraction.action
或者,可以通过以下网址直接访问json数据
http://localhost:8080/strut2autocompleterjson/databasejson.action
{
"postgresql":"postgresql",
"mysql":"mysql",
"others":"others",
"oracle":"oracle",
"microsoft sql server":"microsoft sql server",
"db2":"db2"
}