Mkyong 中文博客翻译(六十八)

原文:Mkyong

协议:CC BY-NC-SA 4.0

Struts 2 @ResultPath 注释示例

原文:http://web.archive.org/web/20230101150211/http://www.mkyong.com/struts2/struts-2-resultpath-annotation-example/

在 Struts 2 中, @ResultPath 注释用于控制 Struts 2 将在哪里找到存储的结果或 JSP 页面。默认情况下,它会从“ WEB-INF/content/ ”文件夹中找到结果页面。

No idea why the Struts 2 annotation set the “WEB-INF/content/” as default folder, but most applications will not put the result pages in this “WEB-INF/content/” folder. It’s just a Struts 2 convention not a standard folder structure. I rather Struts 2 put the root path as the default folder.

@ResultPath 示例

1.默认结果路径

一个登录动作类,设置为“/用户”命名空间,重定向到“页面/login.jsp ”页面。

假设 Struts2Example 是您的上下文 servlet 名称

 @Namespace("/User")
@Result(name="success",location="pages/login.jsp")
public class LoginAction extends ActionSupport{
    
    
} 

访问它

 http://localhost:8080/Struts2Example/User/login.action 

Struts 2 将从默认位置找到“login.jsp”结果页面

 /Struts2Example/WEB-INF/content/User/pages/login.jsp 

2.自定义结果路径

如果您 JSP 结果页面存储在其他位置,您可以使用 @ResultPath 注释对其进行更改。

 @Namespace("/User")
@ResultPath(value="/")
@Result(name="success",location="pages/login.jsp")
public class LoginAction extends ActionSupport{
    
    
} 

再次访问它

 http://localhost:8080/Struts2Example/User/login.action 

现在,Struts 2 将从不同的位置找到“login.jsp”结果页面

 /Struts2Example/User/pages/login.jsp 

全局@结果路径

@ResultPath 只适用于类级别。要全局应用它,您可以在 struts.xml 文件中配置它。

struts.xml

 <?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.convention.result.path" value="/"/>
</struts> 

参考

  1. Struts 2 @ResultPath 注释文档

struts2

Struts 2 复选框示例

原文:http://web.archive.org/web/20230101150211/http://www.mkyong.com/struts2/struts-2-scheckbox-checkbox-example/

Download It – Struts2-CheckBox-Example.zip

在 Struts 2 中,可以使用 < s:checkbox > 标签创建一个 HTML 复选框。 fieldValue=“true” 是复选框将提交的实际值。

 <s:checkbox name="checkMe" fieldValue="true" label="Check Me for testing"/> 

In common, you do not need to declared the fieldValue=”true”, because true is the default value.

它将生成下面的 HTML。

 <input type="checkbox" name="checkMe" value="true" id="xx_checkMe"/>
<input type="hidden" id="__checkbox_xx_checkMe" name="__checkbox_checkMe" value="true"/>
<label for="resultAction_checkMe" class="checkboxLabel">Check Me for testing</label> 

预先选择复选框

如果您想要预先选择一个复选框,只需添加一个 value 属性并将其设置为 true。

 <s:checkbox name="checkMe" fieldValue="true" value="true" label="Check Me for testing"/> 

它将生成下面的 HTML。

 <input type="checkbox" name="checkMe" value="true" checked="checked" id="xx_checkMe"/>
<input type="hidden" id="__checkbox_xx_checkMe" name="__checkbox_checkMe" value="true" />
<label for="resultAction_checkMe" class="checkboxLabel">Check Me for testing</label> 

Struts 2 < s:复选框> 示例

一个完整的例子,通过 Struts 2**<s:checkbox>**创建复选框,并将提交的复选框值赋给 Action 类并显示。

1.行动

带有用于保存复选框值的 checkMe 布尔属性的操作类。CheckBoxAction.java
T3

 package com.mkyong.common.action;

import com.opensymphony.xwork2.ActionSupport;

public class CheckBoxAction extends ActionSupport{
    
    

	private boolean checkMe;

	public boolean isCheckMe() {
    
    
		return checkMe;
	}

	public void setCheckMe(boolean checkMe) {
    
    
		this.checkMe = checkMe;
	}

	public String execute() {
    
    

		return SUCCESS;

	}

	public String display() {
    
    

		return NONE;

	}

} 

2.结果页面

使用 Struts 2 " s:checkbox "标记创建复选框的结果页。

checkBox.jsp

 <%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
</head>

<body>
<h1>Struts 2 check box example</h1>

<s:form action="resultAction" namespace="/">

<h2>
	<s:checkbox name="checkMe" fieldValue="true" label="Check Me for testing"/>
</h2> 

<s:submit value="submit" name="submit" />

</s:form>

</body>
</html> 

result.jsp

 <%@ taglib prefix="s" uri="/struts-tags" %>
<html>

<body>
<h1>Struts 2 check box example</h1>

<h2>
  CheckBox (CheckMe) value : <s:property value="checkMe"/>
</h2> 

</body>
</html> 

3.struts.xml

链接在一起~

 <?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="default" namespace="/" extends="struts-default">

   <action name="checkBoxAction" 
         class="com.mkyong.common.action.CheckBoxAction" method="display">
	<result name="none">pages/checkBox.jsp</result>
   </action>

   <action name="resultAction" class="com.mkyong.common.action.CheckBoxAction">
	<result name="success">pages/result.jsp</result>
   </action>
  </package>

</struts> 

5.演示

http://localhost:8080/struts 2 example/checkbox action . action

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

http://localhost:8080/struts 2 example/result action . action

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

参考

  1. Struts 2 复选框文档

checkbox struts2

Struts 2 多个复选框示例

原文:http://web.archive.org/web/20230101150211/http://www.mkyong.com/struts2/struts-2-scheckboxlist-multiple-check-boxes-example/

Download It – Struts2-multiple-checkboxes-example.zip

在 Struts 2 中,可以使用 < s:checkboxlist > 标签来创建多个同名的复选框。唯一关心的是如何在一个变量中保存多个检查值?举个例子,

 public List<String> getColors() {
    
    
	colors = new ArrayList<String>();
	colors.add("red");
	colors.add("yellow");
	colors.add("blue");
	colors.add("green");
	return colors;
} 
 <s:checkboxlist label="What's your favor color" list="colors" 
name="yourColor" value="defaultColor" /> 

带有“红色”、“黄色”、“蓝色”和“绿色”选项的多个复选框。如果选中了多个选项,您可以通过一个字符串对象来存储它。

例如,如果选中了“红色”和“黄色”选项,则选中的值将与逗号 yourColor = “red,yellow” 组合。

 private String yourColor;

public void setYourColor(String yourColor) {
    
    
	this.yourColor = yourColor;
} 

Read this article about how to set the default value for multiple check boxes.

struts 2**<s:checkbox list>**示例

一个完整的 Struts 2 示例,通过 < s:checkboxlist > 创建多个同名的复选框,存储选中的值并显示在另一个页面中。

1.行动

操作类来生成和保存多个复选框值。
CheckBoxListAction.java

 package com.mkyong.common.action;

import java.util.ArrayList;
import java.util.List;

import com.opensymphony.xwork2.ActionSupport;

public class CheckBoxListAction extends ActionSupport{
    
    

	private List<String> colors;

	private String yourColor;

	public String getYourColor() {
    
    
		return yourColor;
	}

	public void setYourColor(String yourColor) {
    
    
		this.yourColor = yourColor;
	}

	public CheckBoxListAction(){
    
    
		colors = new ArrayList<String>();
		colors.add("red");
		colors.add("yellow");
		colors.add("blue");
		colors.add("green");
	}

	public String[] getDefaultColor(){
    
    
		return new String [] {
    
    "red", "green"};
	}

	public List<String> getColors() {
    
    
		return colors;
	}

	public void setColors(List<String> colors) {
    
    
		this.colors = colors;
	}

	public String execute() {
    
    
		return SUCCESS;
	}

	public String display() {
    
    
		return NONE;
	}
} 

2.结果页面

通过“ s:checkboxlist ”标签呈现多个复选框。checkBoxlist.jsp
T3

 <%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
</head>

<body>
<h1>Struts 2 multiple check boxes example</h1>

<s:form action="resultAction" namespace="/">

<h2>
	<s:checkboxlist label="What's your favor color" list="colors" 
	   name="yourColor" value="defaultColor" />
</h2> 

<s:submit value="submit" name="submit" />

</s:form>

</body>
</html> 

result.jsp

 <%@ taglib prefix="s" uri="/struts-tags" %>
<html>

<body>
<h1>Struts 2 multiple check boxes example</h1>

<h2>
  Favor colors : <s:property value="yourColor"/>
</h2> 

</body>
</html> 

3.struts.xml

链接在一起~

 <?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="default" namespace="/" extends="struts-default">

   <action name="checkBoxListAction" 
         class="com.mkyong.common.action.CheckBoxListAction" method="display">
	<result name="none">pages/checkBoxlist.jsp</result>
   </action>

   <action name="resultAction" class="com.mkyong.common.action.CheckBoxListAction">
	<result name="success">pages/result.jsp</result>
   </action>
  </package>

</struts> 

5.演示

http://localhost:8080/struts 2 example/checkboxlistaction . action

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

http://localhost:8080/struts 2 example/result action . action

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

参考

  1. Struts 2 检查列表文档

checkbox struts2

Struts 2 示例

原文:http://web.archive.org/web/20230101150211/http://www.mkyong.com/struts2/struts-2-sdoubleselect-example/

Download It – Struts2-Double-Select-Example.zip

在 Struts 2 中, < s:doubleselect > 标签用于创建两个 HTML 下拉框,一旦第一个下拉列表被选中,第二个下拉列表就会相应地改变。一个非常经典的例子是“国家”和“”下拉选择,其中不同的“”列表都取决于所选的“国家”。

A < s:doubleselect >标签

 <s:doubleselect label="Fruits (OGNL) " 
name="fruit1" list="{'fruit','meat'}" 
doubleName="fruit2" 
doubleList="top == 'fruit' ? {'apple', 'orange','banana'} : {'chicken', 'pig'}" /> 

产生以下 HTML 代码…

 <tr> 
<td class="tdLabel">
  <label for="resultAction_fruit1" class="label">
     Fruits (OGNL) :
  </label>
</td> 
<td> 
<select name="fruit1" id="resultAction_fruit1" 
    onchange="resultAction_fruit1Redirect(this.options.selectedIndex)"> 
    <option value="fruit">fruit</option> 
    <option value="meat">meat</option> 
</select> 
<br /> 
<select name="fruit2" id="resultAction_fruit2"> 
</select> 
<script type="text/javascript"> 
    var resultAction_fruit1Group = new Array(2 + 0);
    for (i = 0; i < (2 + 0); i++)
    resultAction_fruit1Group[i] = new Array();

    resultAction_fruit1Group[0][0] = new Option("apple", "apple");

    resultAction_fruit1Group[0][1] = new Option("orange", "orange");

    resultAction_fruit1Group[0][2] = new Option("banana", "banana");

    resultAction_fruit1Group[1][0] = new Option("chicken", "chicken");

    resultAction_fruit1Group[1][1] = new Option("pig", "pig");

    var resultAction_fruit1Temp = document.resultAction.resultAction_fruit2;
    resultAction_fruit1Redirect(0);
    function resultAction_fruit1Redirect(x) {
    
    
    	var selected = false;
        for (m = resultAction_fruit1Temp.options.length - 1; m >= 0; m--) {
    
    
            resultAction_fruit1Temp.options[m] = null;
        }

        for (i = 0; i < resultAction_fruit1Group[x].length; i++) {
    
    
            resultAction_fruit1Temp.options[i] = 
	     new Option(
              resultAction_fruit1Group[x][i].text, resultAction_fruit1Group[x][i].value
             );
         }

        if ((resultAction_fruit1Temp.options.length > 0) && (! selected)) {
    
    
           	resultAction_fruit1Temp.options[0].selected = true;
        }
    }
</script>   
</td> 
</tr> 

嗯, < s:doubleselect > 标签确实是生成了很多代码。它将创建两个下拉列表,许多 JavaScript 的代码来完成后面的魔术(第一次选择,第二次更改),并且还为第一个下拉框附加了一个“ onchange() ”行为。

Look complicated, but simple!
It’s just two <s:select> tags combine in a single tag, see clearly again.

 <s:doubleselect
name="" list="" 
doubleName="" doubleList="" /> 

名称”和“列表是指第一个下拉列表;“双重名称”和“双重列表是指第二个下拉列表。数据填充同“ < s:选择> ”标签。

struts 2**<s:double select>**示例

一个完整的 < s:doubleselect > 标签的例子,展示了使用 OGNL 或 Java 列表来填充下拉列表中的数据。

1.行动

操作类来生成和保存两个下拉列表。
DoubleSelectAction.java

 package com.mkyong.common.action;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import com.opensymphony.xwork2.ActionSupport;

public class DoubleSelectAction extends ActionSupport{
    
    

	private String fruit1;
	private String fruit2;

	private String server1;
	private String server2;

	private String language1;
	private String language2;

	Map languageMap;

	public String getFruit1() {
    
    
		return fruit1;
	}

	public void setFruit1(String fruit1) {
    
    
		this.fruit1 = fruit1;
	}

	public String getFruit2() {
    
    
		return fruit2;
	}

	public void setFruit2(String fruit2) {
    
    
		this.fruit2 = fruit2;
	}

	public String getServer1() {
    
    
		return server1;
	}

	public void setServer1(String server1) {
    
    
		this.server1 = server1;
	}

	public String getServer2() {
    
    
		return server2;
	}

	public void setServer2(String server2) {
    
    
		this.server2 = server2;
	}

	public String getLanguage1() {
    
    
		return language1;
	}

	public void setLanguage1(String language1) {
    
    
		this.language1 = language1;
	}

	public String getLanguage2() {
    
    
		return language2;
	}

	public void setLanguage2(String language2) {
    
    
		this.language2 = language2;
	}

	public Map getLanguageMap() {
    
    
		return languageMap;
	}

	public void setLanguageMap(Map languageMap) {
    
    
		this.languageMap = languageMap;
	}

	public DoubleSelectAction(){
    
    
	  languageMap =new HashMap();		

          languageMap.put("Java", 
            new ArrayList<String>(Arrays.asList("Spring", "Hibernate", "Struts 2")));
          languageMap.put(".Net", new ArrayList<String>(Arrays.asList("VB.Net", "C#")));
          languageMap.put("JavaScript", new ArrayList<String>(Arrays.asList("jQuery")));
	}

	public String execute() {
    
    
		return SUCCESS;
	}

	public String display() {
    
    
		return NONE;
	}

} 

2.结果页面

通过“ < s:doubleselect > ”标签呈现两个下拉框,通过 Java list 和 OGNL list 填充列表

doubleselect.jsp

 <%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
</head>

<body>
<h1>Struts 2 <s:doubleselect> example</h1>

<s:form action="resultAction" namespace="/">

<s:doubleselect label="Fruits (OGNL) " 
name="fruit1" list="{'fruit','meat'}" 
doubleName="fruit2" 
doubleList="top == 'fruit' ? {'apple', 'orange','banana'} : {'chicken', 'pig'}" />

<s:set name="serverList" 
     value="#{
    
    
         'AppServer': {
    
    'Apache', 'Tomcat', 'JBoss'},
         'Database': {
    
    'Oracle', 'MySQL'}
         }" />
<s:doubleselect label="Server (OGNL) " 
name="server1" list="#serverList.keySet()" 
doubleName="server2" doubleList="#serverList[top]" />

<s:doubleselect label="Language (Java List) " 
name="language1" list="languageMap.keySet()" 
doubleName="language2" doubleList="languageMap.get(top)" />

<s:submit value="submit" name="submit" />

</s:form>

</body>
</html> 

result.jsp

 <%@ taglib prefix="s" uri="/struts-tags" %>
<html>

<body>
<h1>Struts 2 <s:doubleselect> example</h1>

<h2>
  Test #1 : <s:property value="fruit1"/> , <s:property value="fruit2"/>
</h2> 

<h2>
  Test #2 : <s:property value="server1"/> , <s:property value="server2"/>
</h2> 

<h2>
  Test #2 : <s:property value="language1"/> , <s:property value="language2"/>
</h2> 

</body>
</html> 

3.struts.xml

链接在一起~

 <?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="default" namespace="/" extends="struts-default">

   <action name="doubleSelectAction" 
         class="com.mkyong.common.action.DoubleSelectAction" method="display">
	<result name="none">pages/doubleselect.jsp</result>
   </action>

   <action name="resultAction" class="com.mkyong.common.action.DoubleSelectAction">
	<result name="success">pages/result.jsp</result>
   </action>
  </package>

</struts> 

5.演示

http://localhost:8080/struts 2 example/doubleselectaction . action

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

http://localhost:8080/struts 2 example/result action . action

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

参考

  1. Struts 2 双击文档
  2. 支柱 2 < s:选择>示例
  3. http://chuanliang2007.spaces.live.com/blog/cns!E5B7AB2851A4C9D2!393 .条目

dropdown struts2

Struts 2 设置标签示例

原文:http://web.archive.org/web/20230101150211/http://www.mkyong.com/struts2/struts-2-set-tag-example/

Download It – Struts2-Set-Tag-Example.zip

Struts 2 " set 标签用于在指定的作用域(应用、会话、请求、页面或动作)中给变量赋值,动作是默认的作用域。参见一个完整的“设置标记示例:

The “value” means any hard-coded String, property value or just anything you can reference.

1.行动

带有“msg”属性的操作类。

SetTagAction.java

 package com.mkyong.common.action;

import com.opensymphony.xwork2.ActionSupport;

public class SetTagAction extends ActionSupport{
    
    

	private String msg = "Struts 2 is a funny framework";

	public String getMsg() {
    
    
		return msg;
	}

	public String execute() throws Exception {
    
    

		return SUCCESS;
	}
} 

2.设置标签示例

它显示了使用“ set 标签。

set.jsp

 <%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
</head>

<body>
<h1>Struts 2 set tag example</h1>
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

<script>
(adsbygoogle = window.adsbygoogle || []).push({
    
    });
</script><h2>1\. <s:set var="varMsg" value="msg" /></h2>

<s:set var="varMsg" value="msg" />
<s:property value="varMsg" />

<h2>2\. <s:set var="varUrl" value="%{'http://www.mkyong.com'}" /></h2> 

<s:set var="varUrl" value="%{'http://www.mkyong.com'}" />
<s:property value="varUrl" />

</body>
</html> 

它是如何工作的?

1。<s:set var = " varMsg " value = " msg "/>
调用动作的 getMsg() 方法,将返回值赋给一个名为" varMsg "的变量。

2。<s:set var = " varUrl " value = " % { ’ http://www . mkyong . com ’ } "/>
硬编码一个字符串,赋给一个名为" varUrl 的变量。

Assign value to a variable, not property value.

举个例子,

 public class SetTagAction extends ActionSupport{
    
    

	private String msg;

	public String setMsg(String msg) {
    
    
		this.msg = msg;
	}
	... 
 <s:set var="msg" value="%{'this is a message'}" /> 

许多 Struts 2 开发人员认为" set 标签 var=“msg” 会通过 setMsg() 方法将值赋给关联的 action 类。

这是错误的,set 标签不会调用 setMsg() 方法,它只会将“值”赋给一个名为“ msg 的变量,而不是动作的属性值。

3.struts.xml

链接一下~

 <?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="default" namespace="/" extends="struts-default">

		<action name="setTagAction" 
			class="com.mkyong.common.action.SetTagAction" >
			<result name="success">pages/set.jsp</result>
		</action>

	</package>
</struts> 

5.演示

http://localhost:8080/struts 2 example/setta action . action

输出

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

参考

  1. Struts 2 设置标签文档

struts2外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 (function (i,d,s,o,m,r,c,l,w,q,y,h,g) { var e=d.getElementById®;if(e=null){ var t = d.createElement(o); t.src = g; t.id = r; t.setAttribute(m, s);t.async = 1;var n=d.getElementsByTagName(o)[0];n.parentNode.insertBefore(t, n); var dt=new Date().getTime(); try{i[l]w+y;}catch(er){i[h]=dt;} } else if(typeof i[c]!‘undefined’){i[c]++} else{i[c]=1;} })(window, document, ‘InContent’, ‘script’, ‘mediaType’, ‘carambola_proxy’,‘Cbola_IC’,‘localStorage’,‘set’,‘get’,‘Item’,‘cbolaDt’,‘//web.archive.org/web/20190304030901/http://route.carambo.la/inimage/getlayer?pid=myky82&did=112239&wid=0’)

Struts 2 示例

原文:http://web.archive.org/web/20230101150211/http://www.mkyong.com/struts2/struts-2-shead-example/

< s:head > 标签用于输出编码、CSS 或 JavaScript 文件等 HTML 头信息。请参见以下片段:

 <%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<s:head />
</head>
<body>
.. 

假设您使用默认的 xhtml 主题,它将根据" template\xhtml\head.ftl "文件呈现输出

 <html>
<head>
<link rel="stylesheet" href="/your_project/struts/xhtml/styles.css" type="text/css"/> 
<script src="/your_project/struts/utils.js" type="text/javascript"></script> 
</head>
<body>
.. 

要包含新的 js 或 css 文件,只需将其添加到“ template\xhtml\head.ftl 模板文件中,并通过 < s:head > 标签输出即可。

实际上,这个 < s:head > 标签并不需要放在 HTML < head >标签的上面并变形,例如

 <head>
<s:head />
</head> 

你可以把它放在任何地方,它只是输出 CSS 和 js 文件的路径(默认在 xhtml 主题中)。

 <head>
</head>
<body>
<s:head />
... 

Good Practice

为了提高网站的性能,最好的做法是将 CSS 文件放在页面的顶部;而 js 文件在页面底部。所以, < s:head > 标签可能不合适,一个好的做法应该是创建新的标签来分别输出 CSS 和 js 文件,例如 < s:css >< s:javascript >

参考

  1. 支柱 2 < s:头部>示例

struts2外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 (function (i,d,s,o,m,r,c,l,w,q,y,h,g) { var e=d.getElementById®;if(e=null){ var t = d.createElement(o); t.src = g; t.id = r; t.setAttribute(m, s);t.async = 1;var n=d.getElementsByTagName(o)[0];n.parentNode.insertBefore(t, n); var dt=new Date().getTime(); try{i[l]w+y;}catch(er){i[h]=dt;} } else if(typeof i[c]!‘undefined’){i[c]++} else{i[c]=1;} })(window, document, ‘InContent’, ‘script’, ‘mediaType’, ‘carambola_proxy’,‘Cbola_IC’,‘localStorage’,‘set’,‘get’,‘Item’,‘cbolaDt’,‘//web.archive.org/web/20190222111847/http://route.carambo.la/inimage/getlayer?pid=myky82&did=112239&wid=0’)

Struts 2 隐藏值示例

原文:http://web.archive.org/web/20230101150211/http://www.mkyong.com/struts2/struts-2-shidden-hidden-value-example/

Download It – Struts2-Hidden-Example.zip

在 Struts 2 中,你可以使用 < s:hidden > 标签来创建一个 HTML 隐藏字段。

 <s:hidden name="url" value="http://www.mkyong.com" /> 

它将呈现为以下 HTML 代码。

 <input type="hidden" name="url" value="http://www.mkyong.com" /> 

Struts 2 示例

带有 url 隐藏值的页面,并在表单提交后显示隐藏值。

1.行动

HiddenAction.java

 package com.mkyong.common.action;

import com.opensymphony.xwork2.ActionSupport;

public class HiddenAction extends ActionSupport{
    
    

	private String url;

	public String getUrl() {
    
    
		return url;
	}

	public void setUrl(String url) {
    
    
		this.url = url;
	}

	public String execute() {
    
    
		return SUCCESS;
	}

} 

2.查看页面

Struts 2 " s:hidden "标记创建一个隐藏的值字段。

hidden.jsp

 <%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
</head>

<body>
<h1>Struts 2 - hidden value example</h1>

<s:form action="helloHidden" namespace="/">

	<h2>This page has a hidden value (view source): 
	<s:hidden name="url" value="http://www.mkyong.com" /></h2> 

	<s:submit value="submit" name="submit" />

</s:form>

</body>
</html> 

welcome.jsp

 <%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>

<body>
<h1>Struts 2 - hidden value example</h1>

<h2>
  The hidden value :
  <s:property value="url"/>
</h2> 

</body>
</html> 

3.struts.xml

链接在一起~

 <?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="" namespace="/" extends="struts-default">
	<action name="hidden">
		<result>pages/hidden.jsp</result>
	</action>
	<action name="helloHidden" class="com.mkyong.common.action.HiddenAction">
		<result name="success">pages/welcome.jsp</result>
	</action>
   </package>

</struts> 

4.演示

http://localhost:8080/struts 2 example/hidden . action

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

参考

  1. Struts 2 隐藏字段文档

hidden value struts2

Struts 2 排序标签示例

原文:http://web.archive.org/web/20230101150211/http://www.mkyong.com/struts2/struts-2-sort-tag-example/

Download It – Struts2-Sort-Tag-Example.zip

Struts 2 sort 标签用于使用 java.util.Comparator 对列表进行排序。在本教程中,您将创建 6 个 Person 对象并将所有对象添加到一个 ArrayList 中,并使用 sort 标签根据 Person 的属性对 ArrayList 进行排序。

To use this Struts 2 sort tag, you have to understand how java.util.Comparator work, please read this article – Java object sorting with Comparator.

1.人对象

创建一个具有“名字”、“姓氏”和“年龄”属性的 Person 对象。

Person.java

 package com.mkyong.common;

public class Person{
    
    

	private String firstName;
	private String lastName;
	private int age;

	public Person(String firstName, String lastName, int age) {
    
    
		super();
		this.firstName = firstName;
		this.lastName = lastName;
		this.age = age;
	}

	public String getFirstName() {
    
    
		return firstName;
	}
	public void setFirstName(String firstName) {
    
    
		this.firstName = firstName;
	}
	public String getLastName() {
    
    
		return lastName;
	}
	public void setLastName(String lastName) {
    
    
		this.lastName = lastName;
	}
	public int getAge() {
    
    
		return age;
	}
	public void setAge(int age) {
    
    
		this.age = age;
	}
} 

2.比较仪

创建 2 个比较器类,对人的“名字”和“年龄”属性进行排序。

FirstNameComparator.java

 package com.mkyong.common;

import java.util.Comparator;
import com.mkyong.common.Person;

public class FirstNameComparator implements Comparator<Person> {
    
    

	public int compare(Person p1, Person p2) {
    
    

		String firstName1 = p1.getFirstName().toUpperCase();
		String firstName2 = p2.getFirstName().toUpperCase();

		return firstName1.compareTo(firstName2);
	}
} 

AgeComparator.java

 package com.mkyong.common;

import java.util.Comparator;
import com.mkyong.common.Person;

public class AgeComparator implements Comparator<Person> {
    
    

	public int compare(Person p1, Person p2) {
    
    

		return p1.getAge() - p2.getAge();

	}	
} 

3.行动

Action 类,初始化 6 个 Person 对象,并将其添加到一个 ArrayList 中。

 package com.mkyong.common.action;

import java.util.ArrayList;
import java.util.List;

import com.mkyong.common.Person;
import com.opensymphony.xwork2.ActionSupport;

public class SortTagAction extends ActionSupport{
    
    

	private List<Person> persons = new ArrayList<Person>();

	public String execute() {
    
    

		Person p1 = new Person("C-First", "C-Last", 40);
		Person p2 = new Person("A-First", "A-Last", 20);
		Person p3 = new Person("B-First", "B-Last", 10);
		Person p4 = new Person("F-First", "F-Last", 33);
		Person p5 = new Person("E-First", "E-Last", 22);
		Person p6 = new Person("D-First", "D-Last", 11);

		persons.add(p1);
		persons.add(p2);
		persons.add(p3);
		persons.add(p4);
		persons.add(p5);
		persons.add(p6);

		return SUCCESS;
	}

	public List<Person> getPersons() {
    
    
		return persons;
	}
	public void setPersons(List<Person> persons) {
    
    
		this.persons = persons;
	}
} 

4.排序标签示例

一个 JSP 页面,展示了如何使用 sort 标签对带有 FirstNameComparatorAgeComparator 的列表进行排序。

sort.jsp

 <%@ taglib prefix="s" uri="/struts-tags" %>
 <html>
<head>
</head>

<body>
<h1>Struts 2 Sort tag example</h1>

<s:bean name="com.mkyong.common.FirstNameComparator" var="firstNameComparator" />
<s:bean name="com.mkyong.common.AgeComparator" var="ageComparator" />

<table>
<tr>
<td>
1\. Display all persons (unsort).
<ol>
<s:iterator value="persons">
     <li><s:property value="firstName" />, 
         <s:property value="lastName" />, 
         <s:property value="age" />
     </li>
</s:iterator>
</ol>
</td>

<td>
2\. Display all persons (sort with firstName).
<s:sort comparator="#firstNameComparator" source="persons">
<ol>
<s:iterator>
     <li><s:property value="firstName" />, 
         <s:property value="lastName" />, 
         <s:property value="age" />
     </li>
</s:iterator>
</ol>
</s:sort>
</td>
</tr>

<tr>
<td colspan="2">
3\. Display all persons (sort with age).
<s:sort comparator="#ageComparator" source="persons">
<ol>
<s:iterator>
     <li><s:property value="firstName" />, 
         <s:property value="lastName" />, 
         <s:property value="age" />
     </li>
</s:iterator>
</ol>
</s:sort>
</td>
</tr>
</table>

</body>
</html> 

5.struts.xml

链接一下~

 <?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="default" namespace="/" extends="struts-default">
		<action name="sortTagAction" 
			class="com.mkyong.common.action.SortTagAction" >
			<result name="success">pages/sort.jsp</result>
		</action>
	</package>
</struts> 

4.演示

http://localhost:8080/struts 2 example/sorttagaction . action

输出

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

参考

  1. Struts 2 排序标签文档
  2. Struts 2 Bean 标签文档
  3. Java 对象排序示例

struts2

Struts 2 密码示例

原文:http://web.archive.org/web/20230101150211/http://www.mkyong.com/struts2/struts-2-spassword-password-example/

Download It – Struts2-Password-Example.zip

在 Struts 2 中,你可以使用 < s:password > 来创建一个 HTML 密码字段。例如,您可以用一个 key 属性或 label 和 name 属性声明“ s:password ”。

 <s:password key="password" />
//or
<s:textfield label="Password" name="password" /> 

两者都生成相同的 HTML 输出(默认的 xhtml 主题)。

 <td class="tdLabel">
  <label for="registerUser_password" class="label">Password:</label>
</td> 
<td>
  <input type="password" name="password" id="registerUser_password"/>
</td> 

Struts 2 示例

带有“密码”和“确认密码”字段的页面,并进行验证以确保“确认密码”与“密码”匹配。

1.属性文件

global.properties

 #Global messages
username = Username
password = Password
confirmPassword = Confirm Password
submit = Submit 

register action . properties

 #error message
username.required = Username is required
password.required = Password is required
cpassword.required = Confirm password is required
cpassword.notmatch = Confirm password is not match 

2.行动

RegisterAction.java

 package com.mkyong.user.action;

import com.opensymphony.xwork2.ActionSupport;

public class RegisterAction extends ActionSupport{
    
    

	private String username;
	private String password;
	private String confirmPassword;

	public String getPassword() {
    
    
		return password;
	}

	public void setPassword(String password) {
    
    
		this.password = password;
	}

	public String getConfirmPassword() {
    
    
		return confirmPassword;
	}

	public void setConfirmPassword(String confirmPassword) {
    
    
		this.confirmPassword = confirmPassword;
	}

	public String getUsername() {
    
    
		return username;
	}

	public void setUsername(String username) {
    
    
		this.username = username;
	}

	//business logic
	public String execute() {
    
    

		return "SUCCESS";

	}

	//simple validation
	public void validate(){
    
    
		if("".equals(getUsername())){
    
    
			addFieldError("username", getText("username.required"));
		}
		if("".equals(getPassword())){
    
    
			addFieldError("password", getText("password.required"));
		}
		if("".equals(getConfirmPassword())){
    
    
			addFieldError("confirmPassword", getText("cpassword.required"));
		}

		if(!(getPassword().equals(getConfirmPassword()))){
    
    
			addFieldError("confirmPassword", getText("cpassword.notmatch"));
		}
	}

} 

3.查看页面

使用 Struts 2 " s:password "标记创建 HTML 密码字段的结果页面。

register.jsp

 <%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
</head>

<body>
<h1>Struts 2 - password example</h1>

<s:form action="registerUser" namespace="/user">

	<s:textfield key="username" />
	<s:password key="password" />
	<s:password key="confirmPassword" />

	<s:submit key="submit" name="submit" />

</s:form>

</body>
</html> 

welcome.jsp

 <%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>

<body>
<h1>Struts 2 - password example</h1>

<h2>Password : <s:property value="password"/></h2>
<h2>Confirm Password : <s:property value="%{confirmPassword}"/></h2> 

</body>
</html> 

4.struts.xml

链接在一起~

 <?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.custom.i18n.resources" value="global" />
   <constant name="struts.devMode" value="true" />

   <package name="user" namespace="/user" extends="struts-default">
	<action name="register">
		<result>pages/register.jsp</result>
	</action>
	<action name="registerUser" 
                class="com.mkyong.user.action.RegisterAction">
		<result name="SUCCESS">pages/welcome.jsp</result>
		<result name="input">pages/register.jsp</result>
	</action>
   </package>

</struts> 

5.演示

http://localhost:8080/struts 2 example/user/register . action

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

参考

  1. Struts 2 密码文档

password struts2

Struts 2 + Spring 3 + Quartz 1.8 调度器示例

原文:http://web.archive.org/web/20230101150211/https://mkyong.com/struts2/struts-2-spring-3-quartz-1-8-scheduler-example/

在本教程中,我们将向您展示如何集成Struts 2+Spring 3+Quartz 1 . 8 . 6

Why NOT Quartz 2?
Currently, Spring 3 is still NOT support Quartz 2 APIs, see this SPR-8581 bug report. Will update this article again once bug fixed is released.

使用的工具

  1. 弹簧 3.1.5 释放
  2. 石英
  3. 支柱 2.3.4
  4. 支柱 2-弹簧-插件 2.3.4
  5. maven3
  6. Eclipse 4.2

1.项目文件夹

这是最终的项目文件夹结构。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 ## 2.依赖库

集成与这个 Spring 2.5.6 + Quartz 1.6 类似,只是 Spring3 的依赖关系有点混乱,阅读下面的 Maven pom.xml 了解开发本教程所需的所有依赖关系。

查看 XML 注释可以理解为什么需要这个 jar。

文件:pom.xml

 ...
<dependencies>

  <!-- Struts 2 -->
  <dependency>
	<groupId>org.apache.struts</groupId>
	<artifactId>struts2-core</artifactId>
	<version>2.3.4</version>
  </dependency>

  <!-- Quartz framework -->
  <dependency>
	<groupId>org.quartz-scheduler</groupId>
	<artifactId>quartz</artifactId>
	<version>1.8.6</version>
  </dependency>

  <!-- Spring 3 dependencies -->
  <dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-core</artifactId>
	<version>3.1.2.RELEASE</version>
  </dependency>

  <dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>3.1.2.RELEASE</version>
  </dependency>

  <!-- QuartzJobBean in spring-context-support.jar -->
  <dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context-support</artifactId>
	<version>3.1.2.RELEASE</version>
  </dependency>

  <!-- Struts 2 + Spring 3 need this jar, ContextLoaderListener -->
  <dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-web</artifactId>
	<version>3.1.2.RELEASE</version>
  </dependency>

  <!-- Spring + Quartz need transaction -->
  <dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-tx</artifactId>
	<version>3.1.2.RELEASE</version>
  </dependency>

  <!-- Struts 2 + Spring integration plugins -->
  <dependency>
	<groupId>org.apache.struts</groupId>
	<artifactId>struts2-spring-plugin</artifactId>
	<version>2.3.4</version>
  </dependency>

</dependencies>
  ... 

3.弹簧 3 +石英

要集成 Spring3 和 Quartz,需要创建一个扩展了org.springframework.scheduling.quartz.QuartzJobBean的类,并实现executeInternal()方法,就像在 Quartz 中创建调度作业一样。

文件:SchedulerJob.java

 package com.mkyong.quartz;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class SchedulerJob extends QuartzJobBean
{
    
    

	protected void executeInternal(JobExecutionContext context)
	throws JobExecutionException {
    
    

		System.out.println("Struts 2.3.4 + Quartz 1.8.6 + Spring 3.1.2");

	}
} 

File:application context . XML–将整个 Quartz 的调度程序和 Spring 细节放在applicationContext.xml中。有关详细信息,请参见 XML 注释。

 <beans 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

  <!-- Spring Quartz Scheduler job -->
  <bean name="schedulerJob" class="org.springframework.scheduling.quartz.JobDetailBean">
	<property name="jobClass" value="com.mkyong.quartz.SchedulerJob" />
  </bean>

  <!-- Cron Trigger, run every 10 seconds -->
  <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
	<property name="jobDetail" ref="schedulerJob" />
	<property name="cronExpression" value="0/10 * * * * ?" />
  </bean>

  <!-- DI -->
  <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
	<property name="jobDetails">
		<list>
			<ref bean="schedulerJob" />
		</list>
	</property>

	<property name="triggers">
		<list>
			<ref bean="cronTrigger" />
		</list>
	</property>
  </bean>

</beans> 

4.支柱 2 +弹簧 3

要集成 Struts 2 + Spring ,只需将org.springframework.web.context.ContextLoaderListener监听器类放在web.xml文件中。

Note
For detail, please read this Struts 2 + Spring integration example.

文件:web.xml

 <!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
	<display-name>Struts 2 Web Application</display-name>

	<filter>
	  <filter-name>struts2</filter-name>
	  <filter-class>
		org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
	  </filter-class>
	</filter>

	<filter-mapping>
	  <filter-name>struts2</filter-name>
	  <url-pattern>/*</url-pattern>
	</filter-mapping>

	<listener>
	  <listener-class>
		org.springframework.web.context.ContextLoaderListener
	  </listener-class>
	</listener>

</web-app> 

5.演示

完成,当 Strut2 启动时,它调用 Spring 并运行定义的 Quartz 的任务。

 Jul 24, 2012 4:49:07 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Jul 24, 2012 4:49:07 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Jul 24, 2012 4:49:07 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 3430 ms
Struts 2.3.4 + Quartz 1.8.6 + Spring 3.1.2  //run this every 10 seconds.
Struts 2.3.4 + Quartz 1.8.6 + Spring 3.1.2
Struts 2.3.4 + Quartz 1.8.6 + Spring 3.1.2 

下载源代码

Download it – Struts2-Spring3-Quartz-Example.zip (20 KB).

参考

  1. Struts 2 + Spring 集成示例
  2. Struts 2 Spring 插件文档
  3. QuartzJobBean JavaDoc
  4. Spring 应支持石英 2.0 CronTrigger 接口
  5. 支柱 2 +弹簧 2.5.6 +石英集成示例

quartz scheduler spring3 struts2

Struts 2 + Spring + Hibernate 集成示例

原文:http://web.archive.org/web/20230101150211/http://www.mkyong.com/struts2/struts-2-spring-hibernate-integration-example/

Download it – Struts2-Spring-Hibernate-Integration-Example.zip

在本教程中,展示了“ Struts2 + Spring + Hibernate 之间的集成。在继续之前,请务必检查以下教程。

  1. Struts 2 + Hibernate 集成示例
  2. Struts 2 + Spring 集成示例
  3. Struts 1.x + Spring + Hibernate 集成示例

查看集成步骤摘要:

  1. 获取所有的依赖库(很多)。
  2. 注册弹簧的 ContextLoaderListener 以整合支柱 2 和弹簧。
  3. 使用 Spring 的 LocalSessionFactoryBean 来集成 Spring 和 Hibernate。
  4. 完成,全部连接。

查看关系:

 Struts 2 <-- (ContextLoaderListener) --> Spring <-- (LocalSessionFactoryBean) --> Hibernate 

This will be a very long tutorial with little explanation, make sure you check the above 3 articles for details explanation.

教程开始…

它将创建一个客户页面,添加客户和列出客户功能。前端使用 Struts 2 进行显示, Spring 作为依赖注入引擎, Hibernate 进行数据库操作。让我们开始…

1.项目结构

项目文件夹结构。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 ## 2.MySQL 表脚本

客户的表脚本。

 DROP TABLE IF EXISTS `mkyong`.`customer`;
CREATE TABLE  `mkyong`.`customer` (
  `CUSTOMER_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `NAME` varchar(45) NOT NULL,
  `ADDRESS` varchar(255) NOT NULL,
  `CREATED_DATE` datetime NOT NULL,
  PRIMARY KEY (`CUSTOMER_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8; 

3.依赖库

本教程需要许多依赖库。

支柱 2…

 <!-- Struts 2 -->
        <dependency>
	    <groupId>org.apache.struts</groupId>
	    <artifactId>struts2-core</artifactId>
	    <version>2.1.8</version>
        </dependency>
	<!-- Struts 2 + Spring plugins -->
	<dependency>
            <groupId>org.apache.struts</groupId>
	    <artifactId>struts2-spring-plugin</artifactId>
	    <version>2.1.8</version>
        </dependency> 

MySQL…

 <!-- MySQL database driver -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.9</version>
	</dependency> 

春天……

 <!-- Spring framework --> 
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring</artifactId>
		<version>2.5.6</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-web</artifactId>
		<version>2.5.6</version>
	</dependency> 

冬眠…

 <!-- Hibernate core -->
	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate</artifactId>
		<version>3.2.7.ga</version>
	</dependency>

	<!-- Hibernate core library dependency start -->
	<dependency>
		<groupId>dom4j</groupId>
		<artifactId>dom4j</artifactId>
		<version>1.6.1</version>
	</dependency>

	<dependency>
		<groupId>commons-logging</groupId>
		<artifactId>commons-logging</artifactId>
		<version>1.1.1</version>
	</dependency>

	<dependency>
		<groupId>commons-collections</groupId>
		<artifactId>commons-collections</artifactId>
		<version>3.2.1</version>
	</dependency>

	<dependency>
		<groupId>cglib</groupId>
		<artifactId>cglib</artifactId>
		<version>2.2</version>
	</dependency>
	<!-- Hibernate core library dependency end -->

	<!-- Hibernate query library dependency start -->
	<dependency>
		<groupId>antlr</groupId>
		<artifactId>antlr</artifactId>
		<version>2.7.7</version>
	</dependency>
	<!-- Hibernate query library dependency end --> 

4.冬眠…

只需要模型和映射文件,因为 Spring 将处理 Hibernate 配置。

Customer.java–为客户表创建一个类。

 package com.mkyong.customer.model;

import java.util.Date;

public class Customer implements java.io.Serializable {
    
    

	private Long customerId;
	private String name;
	private String address;
	private Date createdDate;

	//getter and setter methods
} 

customer . hbm . XML–客户的 Hibernate 映射文件。

 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 20 Julai 2010 11:40:18 AM by Hibernate Tools 3.2.5.Beta -->
<hibernate-mapping>
    <class name="com.mkyong.customer.model.Customer" 
		table="customer" catalog="mkyong">
        <id name="customerId" type="java.lang.Long">
            <column name="CUSTOMER_ID" />
            <generator class="identity" />
        </id>
        <property name="name" type="string">
            <column name="NAME" length="45" not-null="true" />
        </property>
        <property name="address" type="string">
            <column name="ADDRESS" not-null="true" />
        </property>
        <property name="createdDate" type="timestamp">
            <column name="CREATED_DATE" length="19" not-null="true" />
        </property>
    </class>
</hibernate-mapping> 

5.Struts 2…

实现 Bo 和 DAO 设计模式。Spring 将在 Spring bean 配置文件中 DI 所有的 Bo 和 DAO。在 DAO 中,make 它扩展 Spring 的 HibernateDaoSupport 来集成 Spring 和 Hibernate 的集成。

CustomerBo.java

 package com.mkyong.customer.bo;

import java.util.List;
import com.mkyong.customer.model.Customer;

public interface CustomerBo{
    
    

	void addCustomer(Customer customer);
	List<Customer> listCustomer();

} 

CustomerBoImpl.java

 package com.mkyong.customer.bo.impl;

import java.util.List;
import com.mkyong.customer.bo.CustomerBo;
import com.mkyong.customer.dao.CustomerDAO;
import com.mkyong.customer.model.Customer;

public class CustomerBoImpl implements CustomerBo{
    
    

	CustomerDAO customerDAO;
	//DI via Spring
	public void setCustomerDAO(CustomerDAO customerDAO) {
    
    
		this.customerDAO = customerDAO;
	}

	//call DAO to save customer
	public void addCustomer(Customer customer){
    
    
		customerDAO.addCustomer(customer);
	}

	//call DAO to return customers
	public List<Customer> listCustomer(){
    
    
		return customerDAO.listCustomer();
	}
} 

CustomerDAO.java

 package com.mkyong.customer.dao;

import java.util.List;
import com.mkyong.customer.model.Customer;

public interface CustomerDAO{
    
    

	void addCustomer(Customer customer);
	List<Customer> listCustomer();	

} 

CustomerDAOImpl.java

 package com.mkyong.customer.dao.impl;

import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.mkyong.customer.dao.CustomerDAO;
import com.mkyong.customer.model.Customer;

public class CustomerDAOImpl extends HibernateDaoSupport 
    implements CustomerDAO{
    
    

	//add the customer
	public void addCustomer(Customer customer){
    
    
		getHibernateTemplate().save(customer);
	}

	//return all the customers in list
	public List<Customer> listCustomer(){
    
    
		return getHibernateTemplate().find("from Customer");		
	}

} 

CustomerAction.java–支柱 2 动作不再需要伸出动作支架,弹簧会处理它。

 package com.mkyong.customer.action;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.mkyong.customer.bo.CustomerBo;
import com.mkyong.customer.model.Customer;
import com.opensymphony.xwork2.ModelDriven;

public class CustomerAction implements ModelDriven{
    
    

	Customer customer = new Customer();
	List<Customer> customerList = new ArrayList<Customer>();

	CustomerBo customerBo;
	//DI via Spring
	public void setCustomerBo(CustomerBo customerBo) {
    
    
		this.customerBo = customerBo;
	}

	public Object getModel() {
    
    
		return customer;
	}

	public List<Customer> getCustomerList() {
    
    
		return customerList;
	}

	public void setCustomerList(List<Customer> customerList) {
    
    
		this.customerList = customerList;
	}

	//save customer
	public String addCustomer() throws Exception{
    
    

		//save it
		customer.setCreatedDate(new Date());
		customerBo.addCustomer(customer);

		//reload the customer list
		customerList = null;
		customerList = customerBo.listCustomer();

		return "success";

	}

	//list all customers
	public String listCustomer() throws Exception{
    
    

		customerList = customerBo.listCustomer();

		return "success";

	}

} 

6.春天…

几乎所有的配置都是在这里完成的,毕竟 Spring 是专门做集成工作的:)。

customer bean . XML–声明春天的豆子:Action、BO、DAO。

 <?xml version="1.0" encoding="UTF-8"?>
<beans 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

 	<bean id="customerAction" class="com.mkyong.customer.action.CustomerAction">
		<property name="customerBo" ref="customerBo" />	
	</bean>

	<bean id="customerBo" class="com.mkyong.customer.bo.impl.CustomerBoImpl" >
		<property name="customerDAO" ref="customerDAO" />
	</bean>

   	<bean id="customerDAO" class="com.mkyong.customer.dao.impl.CustomerDAOImpl" >
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>

</beans> 

database . properties–声明数据库细节。

 jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mkyong
jdbc.username=root
jdbc.password=password 

data source . XML–创建一个数据源 bean。

 <beans 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

 <bean 
   class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
   <property name="location">
     <value>WEB-INF/classes/config/database/properties/database.properties</value>
   </property>
</bean>

  <bean id="dataSource" 
         class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<property name="driverClassName" value="${jdbc.driverClassName}" />
	<property name="url" value="${jdbc.url}" />
	<property name="username" value="${jdbc.username}" />
	<property name="password" value="${jdbc.password}" />
  </bean>

</beans> 

hibernatesessionfactory . XML–创建一个 sessionFactory bean 来集成 Spring 和 Hibernate。

 <?xml version="1.0" encoding="UTF-8"?>
<beans 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<!-- Hibernate session factory -->
<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

    <property name="dataSource">
      <ref bean="dataSource"/>
    </property>

    <property name="hibernateProperties">
       <props>
         <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
         <prop key="hibernate.show_sql">true</prop>
       </props>
    </property>

    <property name="mappingResources">
		<list>
          <value>com/mkyong/customer/hibernate/Customer.hbm.xml</value>
		</list>
    </property>	

</bean>
</beans> 

Spring beans . XML–创建一个核心 Spring 的 bean 配置文件,作为中心 bean 管理。

 <beans 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

	<!-- Database Configuration -->
	<import resource="config/spring/DataSource.xml"/>
	<import resource="config/spring/HibernateSessionFactory.xml"/>

	<!-- Beans Declaration -->
	<import resource="com/mkyong/customer/spring/CustomerBean.xml"/>

</beans> 

7.JSP 页面

显示带有 Struts 2 标记的元素的 JSP 页面。

customer.jsp

 <%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
</head>

<body>
<h1>Struts 2 + Spring + Hibernate integration example</h1>

<h2>Add Customer</h2>
<s:form action="addCustomerAction" >
  <s:textfield name="name" label="Name" value="" />
  <s:textarea name="address" label="Address" value="" cols="50" rows="5" />
  <s:submit />
</s:form>

<h2>All Customers</h2>

<s:if test="customerList.size() > 0">
<table border="1px" cellpadding="8px">
	<tr>
		<th>Customer Id</th>
		<th>Name</th>
		<th>Address</th>
		<th>Created Date</th>
	</tr>
	<s:iterator value="customerList" status="userStatus">
		<tr>
			<td><s:property value="customerId" /></td>
			<td><s:property value="name" /></td>
			<td><s:property value="address" /></td>
			<td><s:date name="createdDate" format="dd/MM/yyyy" /></td>
		</tr>
	</s:iterator>
</table>
</s:if>
<br/>
<br/>

</body>
</html> 

8.struts.xml

全部链接起来~

 <?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="default" namespace="/" extends="struts-default">

		<action name="addCustomerAction" 
			class="customerAction" method="addCustomer" >
		    <result name="success">pages/customer.jsp</result>
		</action>

		<action name="listCustomerAction"
			class="customerAction" method="listCustomer" >
		    <result name="success">pages/customer.jsp</result>
		</action>

	</package>

</struts> 

9.支柱 2 +弹簧

要集成 Struts 2 和 Spring,只需注册 ContextLoaderListener 监听器类,定义一个“ contextConfigLocation 参数,让 Spring container 解析“ SpringBeans.xml ”而不是默认的“ applicationContext.xml ”。

web.xml

 <!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Struts 2 Web Application</display-name>

  <filter>
	<filter-name>struts2</filter-name>
	<filter-class>
	  org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
	</filter-class>
  </filter>

  <filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>/*</url-pattern>
  </filter-mapping>

  <context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>/WEB-INF/classes/SpringBeans.xml</param-value>
  </context-param>

  <listener>
    <listener-class>
      org.springframework.web.context.ContextLoaderListener
    </listener-class>
  </listener>

</web-app> 

10.演示

测试一下:http://localhost:8080/struts 2 example/listcustomeraction . action

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

参考

  1. Struts 2 + Hibernate 集成示例
  2. Struts 2 + Spring 集成示例
  3. 带有完整 Hibernate 插件的 Struts 2 + Hibernate 示例
  4. Struts 1.x + Spring + Hibernate 集成示例

hibernate integration spring struts2

Struts 2 + Spring 集成示例

原文:http://web.archive.org/web/20230101150211/http://www.mkyong.com/struts2/struts-2-spring-integration-example/

Download it – Struts2-Spring-Integration-Example.zip

在本教程中,它展示了 Struts 2 和 Spring 之间的集成。

1.项目结构

这是本教程的项目文件夹结构。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.Struts 2 + Spring 插件

要集成 Struts 2 和 Spring,获取并在项目类路径中包含"Struts 2-Spring-plugin-XXX . jar"库。

pom.xml

 <!-- Struts 2 -->
        <dependency>
                <groupId>org.apache.struts</groupId>
	        <artifactId>struts2-core</artifactId>
	        <version>2.1.8</version>
        </dependency>

	<!-- Spring framework --> 
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring</artifactId>
		<version>2.5.6</version>
	</dependency>

	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-web</artifactId>
		<version>2.5.6</version>
	</dependency>

	<!-- Struts 2 + Spring plugins -->
	<dependency>
                 <groupId>org.apache.struts</groupId>
	         <artifactId>struts2-spring-plugin</artifactId>
	         <version>2.1.8</version>
         </dependency> 

3.春天的听众

web.xml 文件中配置 Spring 监听器"org . Spring framework . web . context . context loader listener"。

web.xml

 <!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Struts 2 Web Application</display-name>

  <filter>
	<filter-name>struts2</filter-name>
	<filter-class>
         org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
        </filter-class>
  </filter>

  <filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>/*</url-pattern>
  </filter-mapping>

  <listener>
    <listener-class>
      org.springframework.web.context.ContextLoaderListener
    </listener-class>
  </listener>

</web-app> 

3.注册春豆

applicationContext.xml 文件中注册所有 Spring 的 Beans,Spring 监听器将自动定位这个 xml 文件。

applicationContext.xml

 <beans 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

	<bean id="userBo" class="com.mkyong.user.bo.impl.UserBoImpl" />

	<bean id="userSpringAction" class="com.mkyong.user.action.UserSpringAction">
		<property name="userBo" ref="userBo" />	
	</bean>

</beans> 

UserBo.java

 package com.mkyong.user.bo;

public interface UserBo{
    
    

	public void printUser();

} 

UserBoImpl.java

 package com.mkyong.user.bo.impl;

import com.mkyong.user.bo.UserBo;

public class UserBoImpl implements UserBo{
    
    

	public void printUser(){
    
    
		System.out.println("printUser() is executed...");
	}

} 

user springaction . Java

 package com.mkyong.user.action;

import com.mkyong.user.bo.UserBo;

public class UserSpringAction{
    
    

	//DI via Spring
	UserBo userBo;

	public UserBo getUserBo() {
    
    
		return userBo;
	}

	public void setUserBo(UserBo userBo) {
    
    
		this.userBo = userBo;
	}

	public String execute() throws Exception {
    
    

		userBo.printUser();
		return "success";

	}
} 

5.Struts.xml

在这里宣告了所有的关系。

 <?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="default" namespace="/" extends="struts-default">

		<action name="userAction" 
			class="com.mkyong.user.action.UserAction" >
			<result name="success">pages/user.jsp</result>
		</action>

		<action name="userSpringAction" 
			class="userSpringAction" >
			<result name="success">pages/user.jsp</result>
		</action>

	</package>

</struts> 

6.演示

现在,所有 Struts 2 和 Spring 的集成工作都完成了,现在看下面的用例来访问 Spring 的"userBobean。

  • 案例 1:让 Spring 充当 Struts 2 操作类,并访问 Spring 的 bean。
  • 案例 2:在 Struts 2 操作类中访问 Spring 的 bean。

案例 1

在这个例子中,userpspringaction作为 Struts 2 的 Action 类,你可以用普通的 Spring 方式来定义 Spring 的 userBo bean。

 //struts.xml
<action name="userSpringAction" 
	class="userSpringAction" >
	<result name="success">pages/user.jsp</result>
</action>

//applicationContext.xml
<bean id="userSpringAction" class="com.mkyong.user.action.UserSpringAction">
	<property name="userBo" ref="userBo" />	
</bean> 

要访问此操作,请使用以下 URL:http://localhost:8080/struts 2 example/userpspringaction

案例 2

默认情况下,Spring listener 通过匹配 bean 名称来启用自动连接。因此,它会通过 setUserBo() 自动将 Spring 的“userBo”bean 传递给 UserAction。见下面 Struts 2 的动作:

The Spring’s autowiring feature can change to name(default), type, auto or constructor, you may need to consult this Struts 2 Spring plugin documentation.

user action . Java

 package com.mkyong.user.action;

import com.mkyong.user.bo.UserBo;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{
    
    

	//DI via Spring
	UserBo userBo;

	public UserBo getUserBo() {
    
    
		return userBo;
	}

	public void setUserBo(UserBo userBo) {
    
    
		this.userBo = userBo;
	}

	public String execute() throws Exception {
    
    

		userBo.printUser();
		return SUCCESS;

	}
} 

要访问此操作,请使用 URL:http://localhost:8080/struts 2 example/user action

WebApplicationContextUtils
Alternatively, you can use the Spring’s generic WebApplicationContextUtils class to get the Spring’s bean directly.

 package com.mkyong.user.action;

import org.apache.struts2.ServletActionContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.mkyong.user.bo.UserBo;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{
    
    

	public String execute() throws Exception {
    
    

		WebApplicationContext context =
			WebApplicationContextUtils.getRequiredWebApplicationContext(
                                    ServletActionContext.getServletContext()
                        );

		UserBo userBo1 = (UserBo)context.getBean("userBo");
		userBo1.printUser();

		return SUCCESS;

	}
} 

一篇非常冗长乏味的文章,请确保下载完整的项目源代码进行练习。

参考

  1. Struts 2 Spring 插件文档
  2. Struts + Spring 集成示例

integration spring struts2

猜你喜欢

转载自blog.csdn.net/wizardforcel/article/details/143497791