在上一章 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" }