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

原文:Mkyong

协议:CC BY-NC-SA 4.0

Struts 2 + Spring 2.5.6 + Quartz 1.6 调度器集成示例

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

Struts 2 + Spring 2.5.6 + Quartz 调度器集成示例

在本教程中,我们将向您展示如何将Struts 2+Spring 2 . 5 . 6+Quartz 1 . 6 . 5调度器集成在一起。这种关系看起来像这样:

 Struts 2 <-- Plugin --> Spring <--(Helper)--> Quartz <---> Scheduler task 

使用的工具

  1. 弹簧 2.5.6
  2. 石英
  3. Struts 2.1.8
  4. 支柱 2-弹簧-插件 2.1.8
  5. Maven 2
  6. Eclipse 3.6

Note
You may also interest at this – Struts 2 + Spring 3 + Quartz 1.8.6 integration example..

1.项目文件夹

这是项目文件夹结构。

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

获取所有的依赖库,你需要 Spring,Struts2,struts 2-Spring-Plugin 和 Quartz jar 文件。

文件:pom.xml

 ...
  <dependencies>

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

	<!-- Quartz framework -->
	<dependency>
          <groupId>opensymphony</groupId>
	  <artifactId>quartz</artifactId>
	  <version>1.6.3</version>
	</dependency>

	<!-- Quartz dependency library-->
	<dependency>
	  <groupId>commons-collections</groupId>
	  <artifactId>commons-collections</artifactId>
	  <version>3.2.1</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>

  </dependencies>
  ... 

3.调度程序任务

将所有调度程序逻辑放在这个类中。

文件:SchedulerTask.java

 package com.mkyong.quartz;

public class SchedulerTask {

   public void printSchedulerMessage() {

	   System.out.println("Struts 2 + Spring + Quartz ......");

   }
} 

4.弹簧+石英

要集成 Spring 和 Quartz,创建一个扩展org.springframework.scheduling.quartz.QuartzJobBean的类,通过 setter 方法引用调度器任务(【SchedulerTask.java】)并将调度器逻辑放在executeInternal()方法中。

文件: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
{
	private SchedulerTask schedulerTask;

	public void setSchedulerTask(SchedulerTask schedulerTask) {
		this.schedulerTask = schedulerTask;
	}

	protected void executeInternal(JobExecutionContext context)
	throws JobExecutionException {

		schedulerTask.printSchedulerMessage();

	}
} 

文件:application context . XML——创建一个applicationContext.xml文件,把所有 Spring + Quartz 集成的东西放在里面。有关详细信息,请阅读 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">

   <!-- Scheduler task -->
   <bean name="schedulerTask" class="com.mkyong.quartz.SchedulerTask" />

   <!-- Scheduler job -->
   <bean name="schedulerJob" 
     class="org.springframework.scheduling.quartz.JobDetailBean">

     <property name="jobClass" value="com.mkyong.quartz.SchedulerJob" />

     <property name="jobDataAsMap">
	 <map>
	    <entry key="schedulerTask" value-ref="schedulerTask" />
	 </map>
      </property>
   </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>

   <!-- Scheduler -->
   <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> 

5.支柱 2 +弹簧

要集成 Struts 2 + Spring ,只需将org.springframework.web.context.ContextLoaderListener监听器类放在web.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>

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

</web-app> 

6.演示

启动 Strut2 时,它调用 Spring 并运行定义的 Quartz 的作业——每 10 秒调用SchedulerTask.printSchedulerMessage()

 INFO: ... initialized Struts-Spring integration successfully
16 Julai 2010 12:51:38 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
16 Julai 2010 12:51:38 PM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
16 Julai 2010 12:51:38 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/21  config=null
16 Julai 2010 12:51:38 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 2110 ms
Struts 2 + Spring + Quartz ......
Struts 2 + Spring + Quartz ......
Struts 2 + Spring + Quartz ......
Struts 2 + Spring + Quartz ......
Struts 2 + Spring + Quartz ...... 

下载源代码

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

参考

  1. Struts 2 + Spring 集成示例
  2. Struts 2 Spring 插件文档
  3. Struts + Spring 集成示例
  4. Struts + Quartz 集成示例
  5. 支柱+弹簧+石英集成示例

integration quartz scheduler spring struts2

Struts 2 单选按钮示例

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

Download It – Struts2-Radio-Button-Example.zip

在 Struts 2 中,可以使用 < s:radio > 标签创建一个 HTML 单选按钮。有趣的是,有很多方法可以将数据填充到单选按钮中,通过列表、OGNL 或对象。看看下面的例子就知道怎么做了。

Struts 2 示例

这个例子展示了如何使用列表、OGNL 和对象向通过 Struts 2 标签创建的单选按钮填充数据。

1.行动

为单选按钮创建性别和语言值列表的操作类。

RadioButtonAction.java

 package com.mkyong.common.action;

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

import com.mkyong.common.model.Language;
import com.opensymphony.xwork2.ActionSupport;

public class RadioButtonAction extends ActionSupport{

	private List<String> genders;
	private List<Language> languages ;

	private String yourGender;
	private String yourAnswer;
	private String yourLanguage;

	private static final String MALE = "male";
	private static final String FEMALE = "female";
	private static final String UNKNOWN = "unknown";

	public RadioButtonAction(){

		genders = new ArrayList<String>();
		genders.add(MALE);
		genders.add(FEMALE);
		genders.add(UNKNOWN);

		languages = new ArrayList<Language>();
		languages.add( new Language("EN", "English") );
		languages.add( new Language("FR", "France") );
		languages.add( new Language("CN_ZH", "Chinese") );
		languages.add( new Language("DE", "German") );

	}

	//return default gender value
	public String getDefaultGenderValue(){
		return UNKNOWN;
	}

	//return default language value
	public String getDefaultLanguageValue(){
		return "CN_ZH";
	}

	public String execute() {
		return SUCCESS;
	}
	public String display() {
		return NONE;
	}

	//getter ad setter methods
} 

Language.java

 package com.mkyong.common.model;

public class Language{

	private String languageCode;
	private String languageDisplay;

	//getter and setter methods

	public Language(String languageCode, String languageDisplay) {
		this.languageCode = languageCode;
		this.languageDisplay = languageDisplay;
	}
} 

2.结果页面

使用 Struts 2 " s:radio "通过列表、OGNL 和对象创建三个单选按钮的结果页。

radiobutton.jsp

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

<body>
<h1>Struts 2 radio button example</h1>

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

<h2>
  <s:radio label="Gender" name="yourGender" list="genders" value="defaultGenderValue" />
  <s:radio label="Gender" name="yourLanguage" list="languages" 
      listKey="languageCode" listValue="languageDisplay" value="defaultLanguageValue" />
  <s:radio label="Answer" name="yourAnswer" list="#{'1':'Yes','2':'No'}" value="2" />
</h2> 

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

</s:form>

</body>
</html>a 

result.jsp

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

<body>
<h1>Struts 2 radio button example</h1>

<h2>
  Your Selected Gender : <s:property value="yourGender"/>
</h2> 
<h2>
  Your Selected Language : <s:property value="yourLanguage"/>
</h2> 
<h2>
  Your Selected Answer : <s:property value="yourAnswer"/>
</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="radioButtonAction" 
         class="com.mkyong.common.action.RadioButtonAction" method="display">
		<result name="none">pages/radiobutton.jsp</result>
    </action>

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

</struts> 

5.演示

http://localhost:8080/struts 2 example/radio button action . action

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

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传To understand how to preselect a value, read this article – preselect a radio button value in Struts 2

参考

  1. http://struts.apache.org/2.0.11.2/docs/radio.html
  2. http://struts . Apache . org/2 . 1 . 8 . 1/docs/struts-2-form-tags . html
  3. 如何在 Struts 2 中预选单选按钮值

radio button struts2

Struts 2 下拉框示例

原文:http://web.archive.org/web/20230101150211/http://www.mkyong.com/struts2/struts-2-sselect-drop-down-box-example/

Download It – Struts2-Select-DropDown-Box-Example.zip

在 Struts 2 中,可以使用 < s:select > 标签创建一个 HTML 下拉框。

 <s:select label="What's your favor search engine" 
		headerKey="-1" headerValue="Select Search Engines"
		list="searchEngine" 
		name="yourSearchEngine" /> 

产生以下 HTML 代码…

 <td class="tdLabel">
   <label for="resultAction_yourSearchEngine" class="label">
       What's your favor search engine:
   </label>
</td> 
<td>
<select name="yourSearchEngine" id="resultAction_yourSearchEngine"> 
    <option value="-1">Select Search Engines</option> 
    <option value="google.com">google.com</option> 
    <option value="bing.com">bing.com</option> 
    <option value="yahoo.com">yahoo.com</option> 
    <option value="baidu.com">baidu.com</option> 
</select> 
</td> 

语法是不言自明的,但是“ headerKey 和“ headerValue ”。“ headerKey 是下拉列表中第一项的键,“ headerValue 是下拉列表中第一项的值表达式。

To auto select a default value for drop down box, read this artcle : Auto select drop down box value in Struts 2

Struts 2 < s:select > 示例

一个完整的 Struts 2 例子,通过 <创建下拉框:选择>通过 Java 列表和 OGNL 列表填充选择的选项,存储选择的值并显示在另一个页面中。

1.行动

操作类来生成和保存所选的下拉框选项。
SelectAction.java

 package com.mkyong.common.action;

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

import com.opensymphony.xwork2.ActionSupport;

public class SelectAction extends ActionSupport{

	private List<String> searchEngine;

	private String yourSearchEngine;
	private String yourMonth;

	public String getYourMonth() {
		return yourMonth;
	}

	public void setYourMonth(String yourMonth) {
		this.yourMonth = yourMonth;
	}

	public List<String> getSearchEngine() {
		return searchEngine;
	}

	public void setSearchEngine(List<String> searchEngine) {
		this.searchEngine = searchEngine;
	}

	public String getYourSearchEngine() {
		return yourSearchEngine;
	}

	public void setYourSearchEngine(String yourSearchEngine) {
		this.yourSearchEngine = yourSearchEngine;
	}

	public String getDefaultSearchEngine() {
		return "yahoo.com";
	}

	public SelectAction(){

		searchEngine = new ArrayList<String>();
		searchEngine.add("google.com");
		searchEngine.add("bing.com");
		searchEngine.add("yahoo.com");
		searchEngine.add("baidu.com");
	}

	public String execute() {
		return SUCCESS;
	}

	public String display() {
		return NONE;
	}

} 

2.结果页面

通过“ < s:select > ”标签呈现下拉框,通过 Java list 和 OGNL list 填充选择选项

select.jsp

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

<body>
<h1>Struts 2 drop down box example</h1>

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

<h2>
	<s:select label="What's your favor search engine" 
		headerKey="-1" headerValue="Select Search Engines"
		list="searchEngine" 
		name="yourSearchEngine" 
		value="defaultSearchEngine" />
</h2> 

<h2>
	<s:select label="Select a month" 
		headerKey="-1" headerValue="Select Month"
		list="#{'1':'Jan', '2':'Feb', '3':'Mar', '4':'Apr'}" 
		name="yourMonth" 
		value="2" />
</h2> 

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

</s:form>

</body>
</html> 

result.jsp

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

<body>
<h1>Struts 2 drop down box example</h1>

<h2>
  Favor search engine : <s:property value="yourSearchEngine"/>
</h2> 

<h2>
  Selected month : <s:property value="yourMonth"/>
</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="selectAction" 
         class="com.mkyong.common.action.SelectAction" method="display">
	<result name="none">pages/select.jsp</result>
   </action>

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

</struts> 

5.演示

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

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

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

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

参考

  1. Struts 2 选择文档

dropdown struts2

Struts 2 textarea 示例

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

Download It – Struts2-TextArea–Example.zip

在 Struts 2 中,你可以使用 < s:textarea > 来创建一个 HTML textarea 字段。

 <s:textarea label="Address" name="address" cols="40" rows="10"/> 

它将呈现为以下 HTML 代码。

 <textarea name="address" cols="40" rows="10" id="formaction_address"></textarea> 

Struts 2 示例

一个页面包含一个地址文本区字段,并在表单提交后显示文本区值。

1.行动

TextAreaAction.java

 package com.mkyong.common.action;

import com.opensymphony.xwork2.ActionSupport;

public class TextAreaAction extends ActionSupport{

	private String address;

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public String execute() {
		return SUCCESS;
	}

} 

2.查看页面

Struts 2 " s:textarea "标记来创建一个 textarea 字段。

textarea.jsp

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

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

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

<h2>
  <s:textarea label="Address" name="address" cols="40" rows="10"/>
</h2> 

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

</s:form>

</body>
</html> 

welcome.jsp

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

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

<h2>
  <s:property value="address"/>
</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="textarea">
	      <result>pages/textarea.jsp</result>
	</action>
	<action name="helloTextarea" 
              class="com.mkyong.common.action.TextAreaAction">
	      <result name="success">pages/welcome.jsp</result>
	</action>
  </package>

</struts> 

4.演示

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

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

参考

  1. Struts 2 文本区文档

struts2 textarea

Struts 2 文本框示例

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

Download It – Struts2-textbox-Example.zip

在 Struts 2 中,你可以使用 < s:textfield > 来创建一个 HTML 输入框。例如,您可以用一个键属性或标签和名称属性来声明“ s:textfield ”。

 <s:textfield key="username" />
//or
<s:textfield label="Username" name="username" /> 

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

 <td class="tdLabel">
  <label for="registerUser_username" class="label">Username:</label>
</td>
<td>
  <input type="text" name="username" value="" id="registerUser_username"/>
</td> 

In Struts 2, the “name” will maps to the JavaBean property automatically. In this case, on form submit, the textbox value with “name=’username’” will call the corresponds Action’s setUsername(String xx) to set the value.

Struts 2 示例

在 Struts 2 中创建文本框输入字段的快速指南。

1.属性文件

存储消息的两个属性文件。

global.properties

 #Global messages
username = Username
submit = Submit 

register action . properties

 #error message
username.required = Username is required 

2.行动

一个简单的 Action 类,通过验证来确保用户名不为空,否则返回一个错误消息。

RegisterAction.java

 package com.mkyong.user.action;

import com.opensymphony.xwork2.ActionSupport;

public class RegisterAction extends ActionSupport{

	private String username;

	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"));
		}
	}
} 

3.查看页面

使用 Struts 2 " s:textfield "创建 HTML 文本框输入字段的结果页面。

register.jsp

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

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

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

	<s:textfield key="username" />
	<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 - textbox example</h1>

<h2><s:property value="username"/></h2>
or
<h2><s:property value="%{username}"/></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 文本字段文档

struts2 textbox

Struts 2 子集标记示例

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

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

Struts 2 subset 标签用于输出迭代器元素的子集或部分。在本教程中,您将创建一个" numbers “列表,包含 10 个元素(从 1 到 10),并使用 subset 标签” start & count 属性和 decider 方法来输出一个迭代器的子集(列表)。

1.行动

将元素填充到列表中的 Action 类,以及过滤要显示的元素的 decider 方法。

If the decider method return a “true” means display this value; otherwise ignore it. You can do whatever filter logic here.

SubsetTagAction.java

 package com.mkyong.common.action;

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

import org.apache.struts2.util.SubsetIteratorFilter.Decider;
import com.opensymphony.xwork2.ActionSupport;

public class SubsetTagAction extends ActionSupport{

	private List<String> numbers = new ArrayList<String>();

	public String execute() {

		numbers.add("Number 1");
		numbers.add("Number 2");
		numbers.add("Number 3");
		numbers.add("Number 4");
		numbers.add("Number 5");
		numbers.add("Number 6");
		numbers.add("Number 7");
		numbers.add("Number 8");
		numbers.add("Number 9");
		numbers.add("Number 10");

		return SUCCESS;
	}

	public List<String> getNumbers() {
		return numbers;
	}

	public void setNumbers(List<String> numbers) {
		this.numbers = numbers;
	}

	public Decider getNumberDecider() {
	     return new Decider() {
	         public boolean decide(Object obj) throws Exception {
	             String number = ((String)obj).toString();

	             if(("Number 7").equals(number)){
	            	 return true;//display it
	             }else{
	            	 return false;//ignore
	             }
	         }
	     };
	}	
} 

2.子集标签示例

一个 JSP 页面,展示了如何使用 subset 标签来输出迭代器的子集。

The “start” and “count” attribute in the subset tag is start from 0 , which means <s:subset source=”numbers” start=”1″ count=”5″> will extract the element from #2 to #6.

subset.jsp

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

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

<table border="1px" cellpadding="8px">
<tr valign="top">
<td>
1\. Display all numbers.
<ol>
<s:subset source="numbers">
   <s:iterator>
      	<li><s:property /></li>
   </s:iterator>
</s:subset>
</ol>
</td>

<td>
2\. Display numbers , from #2 to #6
<ol>
<s:subset source="numbers" start="1" count="5">
   <s:iterator>
      	<li><s:property /></li>
   </s:iterator>
</s:subset>
</ol>
</td>

<td>
3\. Display numbers 7 only, with decider
<ol>
<s:subset source="numbers" decider="numberDecider">
   <s:iterator>
     	<li><s:property /></li>
   </s:iterator>
</s:subset>
</ol>
</td>
</tr>
</table>

</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="subsetTagAction" 
			class="com.mkyong.common.action.SubsetTagAction" >
			<result name="success">pages/subset.jsp</result>
		</action>
	</package>
</struts> 

4.演示

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

输出

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

参考

  1. Struts 2 子集标签文档

struts2

Struts 2 文本标签示例

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

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

Struts 2 " text "标签用于从与 action 类捆绑在一起的资源包中获取消息。并遵循三个顺序:

  1. 显示资源包中的消息,遵循 Struts 2 资源包搜索顺序
  2. 如果在资源包中没有找到消息,那么将显示标记的主体。
  3. 如果标记体为空,那么将显示 标记中“name”属性的值。

一个完整的例子很好地说明了这一点:

1.行动

转发请求的操作类。

文本标签 Action.java

 package com.mkyong.common.action;

import com.opensymphony.xwork2.ActionSupport;

public class TextTagAction extends ActionSupport{

	public String execute() throws Exception {

		return SUCCESS;
	}
} 

2.属性文件

一个简单的属性文件,包含两个关键字“ name.msg 和“ name.msg.param ”。

texttagaction . properties

 name.msg = "This is a message from properties file"
name.msg.param = "This is a message from properties file - param : {0}" 

3.文本标签示例

它显示了“文本”标签的使用。

text.jsp

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

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

<h2>1.<s:text name="name.msg" /></h2> 
Output : <s:text name="name.msg" />

<h2>2\. <s:text name="name.msg.unknow">message doesn't exists</s:text></h2> 
Output : <s:text name="name.msg.unknow">message doesn't exists</s:text>

<h2>3\. <s:text name="name.msg.unknow" /></h2> 
Output : <s:text name="name.msg.unknow" />

<h2>4\. <s:text name="name.msg.param" ><s:param >mkyong</s:param>
</s:text></h2> 
Output :
<s:text name="name.msg.param" >
	<s:param >mkyong</s:param>
</s:text>

</body>
</html> 

它是如何工作的?
1。s:text name = " name . msg "/>
从与当前操作类(TextTagAction.action)关联的资源包(text tag action . properties)中获取并显示消息。

 "This is a message from properties file" 

2。<s:text name = " name . msg . unknow ">消息不存在< /s:text >
在资源包“text tag action . properties”或任何搜索顺序中找不到关键字,因此显示标记体。

 message doesn't exists 

3。<s:text name = " name . msg . unknow "/>

 name.msg.unknow 

4。<s:text name = " name . msg . param ">s:param>mkyong</s:param></s:text>
通过< param >标签将参数传入资源包。

 "This is a message from properties file - param : mkyong" 

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.devMode" value="true" />
	<package name="default" namespace="/" extends="struts-default">

		<action name="textTagAction" 
			class="com.mkyong.common.action.TextTagAction" >
			<result name="success">pages/text.jsp</result>
		</action>

	</package>
</struts> 

5.演示

http://localhost:8080/struts 2 example/text tag action . action

输出

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

参考

  1. Struts 2 文本标签文档

struts2

Struts 2 教程

原文:http://web.archive.org/web/20230101150211/https://mkyong.com/tutorials/struts-2-tutorials/

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

Apache Struts 2 ,另一个流行的 Java 模型-视图-控制器(MVC)框架,结合了成功的 WebWorkStruts 1.x web 框架。

Apache Struts 2 与 Struts 1 完全不同,它的核心功能都是通过拦截器、“值堆栈”概念、OGNL 表达式和 Struts 2 标签来处理应用程序数据,以及许多注释和约定来实现的,从而使该框架更易于使用。在本教程中,它提供了许多关于使用 Struts 2 MVC 框架的分步示例和解释。

快乐学习 Struts 2。🙂

Struts 2 快速入门

Struts 2 快速入门示例。

Struts 2 配置

任何关于 Struts 2 配置文件的信息。

Struts 2 操作和表单

Struts 2 动作和表单数据管理。

Struts 2 拦截器

关于 Struts 2 拦截器的一件事。

Struts 2 UI 标签

Struts 2 UI 标签,用于呈现 HTML 表单和非表单组件。

Struts 2 控制标签

Struts 2 控制标签或逻辑标签,帮助做条件处理,迭代,操作和显示数据。

  • 迭代器标签示例
    Struts 2 迭代器标签用于迭代一个值,可以是 java.util.Collection 或 java.util.Iterator 中的任意一个
  • if、elseIf、else 标签示例
    Struts 2 If、ElseIf、Else 标签用于进行基本条件检查。
  • append 标签示例
    Struts 2 append 标签用于将几个迭代器(由 List 或 Map 创建)组合成一个迭代器。
  • 生成器标签示例
    Struts 2 生成器标签用于根据页面中提供的“val”属性生成迭代器。
  • merge 标签示例
    Struts 2 merge 标签用于将几个迭代器(由 List 或 Map 创建)合并成一个迭代器。
  • 排序标签示例
    Struts 2 排序标签用于使用 java.util.Comparator 对列表进行排序
  • subset 标签示例
    Struts 2 subset 标签用于输出迭代器元素的子集或部分。

Struts 2 数据标签

Struts 2 数据标签,帮助从 ValueStack 获取数据,或者将数据放入 values stack。

  • 一个标签示例
    Struts 2 一个标签用于呈现一个 HTML“<一个>标签。
  • action 标签示例
    Struts 2 action 标签用于从 JSP 页面中直接调用 action 类。
  • bean 标签示例
    Struts 2 bean 标签用于在 JSP 页面中实例化一个类。
  • 日期标签示例
    Struts 2 日期标签用于格式化 JSP 页面中的日期对象。
  • 调试标签示例
    Struts 2 调试标签是一个非常有用的调试标签,可以输出 JSP 页面中“值堆栈”的内容以及“堆栈上下文”的详细信息。
  • include 标签示例
    Struts 2 include 标签用于将 JSP 或 HTML 页面直接包含到当前页面中。
  • i18n 标签示例
    Struts 2 i18n 标签用于从任何声明的资源包中获取消息,而不仅仅是与当前动作相关联的资源包。
  • param 标签示例
    Struts 2 param 标签用于参数化其他标签。
  • 属性标签示例
    Struts 2 属性标签用于从一个类中获取属性值,该属性将默认为当前 Action 类。
  • push 标签示例
    Struts 2 push 标签用于将值推送到栈顶,以便于访问或引用。
  • set 标签示例
    Struts 2 set 标签用于为指定范围(应用、会话、请求、页面或动作)内的变量赋值。
  • 文本标签示例
    Struts 2 文本标签用于从与 action 类捆绑在一起的资源包中获取消息。
  • url 标签示例
    Struts 2 的“url”标签用于创建一个 url 并将其输出为文本格式。

Struts 2 资源包和本地化

支持 web 本地化特性的 Struts 2 资源包(多语言)。

Struts 2 主题

Struts 2 的布局是由“xhtml”主题设计的,理解 Struts 2 的主题概念是“必须的”。

Struts 2 与其他框架集成

关于 Struts 2 与其他框架的集成——Spring、Hibernate、Quartz、Log4j……

Struts 2 常见问题

Struts 2 常见问题。

Struts 2 常见错误

Struts 2 常见错误。

Struts 2 参考

Tags : struts2 tutorials

struts 2 up down 选择示例

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

Download It – Struts2-UpDownSelect-Example.zip

在 Struts 2 中, < s:updownselect > 标签用于创建一个 HTML 选择组件,并带有按钮来上下移动选择组件中的选项。提交表单时,所有选择选项将按排列顺序提交。

< s:updownselect >示例

 <s:updownselect
list="#{'KFC':'KFC', 'McDonald':'McDonald', 'Burger King':'Burger King',
'Pizza Hut':'Pizza Hut', 'Fat Boy King':'Fat Boy King'}"
name="favFastFood"
headerKey="-1"
headerValue="--- Please Order ---" 
size="7"
/> 

产生下面的 HTML 代码,选择组件,按钮和 JavaScript 来上下移动选择组件中的选项。(默认 xhtml 主题)

 <tr> 
<td class="tdLabel"></td> 
<td><script type="text/javascript" src="/Struts2Example/struts/optiontransferselect.js">
</script> 
<table> 
<tr><td> 
<select name="favFastFood" size="7" 
id="resultAction_favFastFood" multiple="multiple"> 
    <option value="-1">--- Please Order ---</option> 
    <option value="KFC">KFC</option> 
    <option value="McDonald">McDonald</option> 
    <option value="Burger King">Burger King</option> 
    <option value="Pizza Hut">Pizza Hut</option> 
    <option value="Fat Boy King">Fat Boy King</option> 
</select> 
<input type="hidden" id="__multiselect_resultAction_favFastFood" 
name="__multiselect_favFastFood" value="" /> 
</td></tr> 
<tr><td> 
 <input type="button" value="^" onclick="
moveOptionUp(document.getElementById('resultAction_favFastFood'), 'key', '-1');" />

 <input type="button" value="v" onclick="
moveOptionDown(document.getElementById('resultAction_favFastFood'), 'key', '-1');" />

 <input type="button" value="*" onclick="selectAllOptionsExceptSome(
document.getElementById('resultAction_favFastFood'), 'key', '-1');" />
</td></tr> 
</table></td> 
</tr> 
<script type="text/javascript"> 

var containingForm = document.getElementById("resultAction");
StrutsUtils.addEventListener(containingForm, "submit", 
   function(evt) {
     var updownselectObj = document.getElementById("resultAction_favFastFood");
     selectAllOptionsExceptSome(updownselectObj, "key", "-1");
   }, true);
</script> 

Struts 2 示例

< s:updownselect > 标签的完整示例,展示了如何使用 OGNL 和 Java 列表将数据填充到 updown 选择列表中。

1.动作类

操作类来生成和存储选择选项。

UpDownSelectAction.java

 package com.mkyong.common.action;

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

import com.opensymphony.xwork2.ActionSupport;

public class UpDownSelectAction extends ActionSupport{

	private List<String> moviesList = new ArrayList<String>();

	private String favMovie;
	private String favFastFood;

	public UpDownSelectAction(){

		moviesList.add("Spider Man");
		moviesList.add("Matrix");
		moviesList.add("Super Man");
		moviesList.add("Dark Knight");
		moviesList.add("BraveHeart");
		moviesList.add("Ultraman");

	}

	public String getFavFastFood() {
		return favFastFood;
	}

	public void setFavFastFood(String favFastFood) {
		this.favFastFood = favFastFood;
	}

	public List<String> getMoviesList() {
		return moviesList;
	}

	public void setMoviesList(List<String> moviesList) {
		this.moviesList = moviesList;
	}

	public String getFavMovie() {
		return favMovie;
	}

	public void setFavMovie(String favMovie) {
		this.favMovie = favMovie;
	}

	public String execute() throws Exception{

		return SUCCESS;
	}

	public String display() {
		return NONE;
	}

} 

2.结果页面

通过“ < s:updownselect > ”标签渲染 updown select 组件。

updownselect.jsp

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

<body>
<h1>Struts 2 updownselect example</h1>

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

<s:updownselect
list="#{'KFC':'KFC', 'McDonald':'McDonald', 'Burger King':'Burger King',
'Pizza Hut':'Pizza Hut', 'Fat Boy King':'Fat Boy King'}"
name="favFastFood"
headerKey="-1"
headerValue="--- Please Order ---" 
size="7"
/>

<s:updownselect
list="moviesList"
name="favMovie"
headerKey="-1"
headerValue="--- Please Order ---"
size="10"
moveUpLabel="Move Up"
moveDownLabel="Move Down"
selectAllLabel="Select All" />

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

</s:form>

</body>
</html> 

result.jsp

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

<body>
<h1>Struts 2 updownselect example</h1>

<h2>
   Favor fast food : <s:property value="favFastFood"/> 
</h2> 

<h2>
   Favor movies : <s:property value="favMovie"/> 
</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="updownSelectAction" 
       class="com.mkyong.common.action.UpDownSelectAction" method="display">
       <result name="none">pages/updownselect.jsp</result>
   </action>

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

</struts> 

4.演示

http://localhost:8080/struts 2 example/updownselectaction . action
选择选项并上下移动。

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

提交时,所有选项将按排列顺序提交。

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

参考

  1. Struts 2 updownselect 示例
  2. http://www . mkyong . com/struts 2/struts-2-sdoubleselect-example/

struts2

Struts 2 上传多个文件示例

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

Download It – Struts2-Multiple-Files-Upload-Example.zip

在最后一个 Struts 2 文件上传示例中,允许用户选择单个文件并上传到服务器。在本教程中,您将学习如何允许用户上传多个文件到服务器。

1.动作类

在 Action 类中,可以使用 List 或 Array 来存储上传的文件。

FileUploadAction.java

 package com.mkyong.common.action;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import com.opensymphony.xwork2.ActionSupport;

public class MultipleFileUploadAction extends ActionSupport{

	private List<File> fileUpload = new ArrayList<File>();
	private List<String> fileUploadContentType = new ArrayList<String>();
	private List<String> fileUploadFileName = new ArrayList<String>();

	public List<File> getFileUpload() {
		return fileUpload;
	}

	public void setFileUpload(List<File> fileUpload) {
		this.fileUpload = fileUpload;
	}

	public List<String> getFileUploadContentType() {
		return fileUploadContentType;
	}

	public void setFileUploadContentType(List<String> fileUploadContentType) {
		this.fileUploadContentType = fileUploadContentType;
	}

	public List<String> getFileUploadFileName() {
		return fileUploadFileName;
	}

	public void setFileUploadFileName(List<String> fileUploadFileName) {
		this.fileUploadFileName = fileUploadFileName;
	}

	public String upload() throws Exception{

	    for (File file: fileUpload) {
	        System.out.println("File :" + file);
	    }

	    for (String fileName: fileUploadFileName) {
	        System.out.println("Filename : " + fileName);
	    }

	    for (String fileContentType: fileUploadContentType) {
	        System.out.println("File type : " + fileContentType);
	    }

	    return SUCCESS;

	}

	public String display() {
		return NONE;
	}

} 

2.结果页面

使用 < s:file > 标签渲染多个文件上传组件,将表单 enctype 类型设置为“multipart/form-data”

fileupload.jsp

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

<body>
<h1>Struts 2 upload multiple files example</h1>

<s:form action="resultAction" namespace="/" 
method="POST" enctype="multipart/form-data">

<s:file label="File 1" name="fileUpload" size="40" />
<s:file label="File 2" name="fileUpload" size="40" />
<s:file label="FIle 2" name="fileUpload" size="40" />

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

</s:form>

</body>
</html> 

result.jsp

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

<body>
<h1>Struts 2 upload multiple files example</h1>

<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script><h2>
   File Name : <s:property value="fileUploadFileName"/> 
</h2> 

<h2>
   Content Type : <s:property value="fileUploadContentType"/> 
</h2> 

<h2>
   File : <s:property value="fileUpload"/> 
</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="multipleFileUploadAction" 
	    class="com.mkyong.common.action.MultipleFileUploadAction" 
            method="display">
		<result name="none">pages/multiplefileupload.jsp</result>
	</action>

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

</struts> 

4.演示

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

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

参考

  1. Struts 2 文件上传示例
  2. Struts 2 文件文档
  3. http://struts.apache.org/2.0.14/docs/file-upload.html
  4. http://struts . Apache . org/2 . 0 . 14/docs/how-do-we-upload-files . html
  5. http://www.mkyong.com/struts/struts-file-upload-example/

file upload 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/20190225092247/http://route.carambo.la/inimage/getlayer?pid=myky82&did=112239&wid=0’)

Struts 2 URL 标记示例

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

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

Struts 2 " url "标签用于创建一个 url 并以文本格式输出。它本身从不工作,但它可以提供其他标签的 URL,如 < s:a > 创建超链接或 < img > 呈现图像。在本教程中,它展示了 Struts 2 " url 标签的 5 个常见用例。

1.行动

转发请求的操作类。

尖叫。java

 package com.mkyong.common.action;

import com.opensymphony.xwork2.ActionSupport;

public class URLTagAction extends ActionSupport{

	public String execute() {
		return SUCCESS;
	}

} 

2.Url 标记示例

下面的 5 个例子展示了 Struts 2 " url 标签的使用。

  1. Create an image url.

     <img src="<s:url valueimg/man.jpg"/>" /> 
    

    输出(假设根上下文名是“Struts2Example”)

     <img src="/Struts2Exampimg/man.jpg" /> 
    
  2. Create a “Google” text and link it to http://www.google.com.

     <a href="<s:url value="http://www.google.com"  />" target="_blank">Google</a> 
    

    输出

     <a href="http://www.google.com" target="_blank">Google</a> 
    

    When you define the URL value with starting of “http” or “www” words, Struts 2 will render it as it is, without add the extra root context name as example 1.

  3. Create an Action URL with a “id” parameter, and output it as a text format.

     <s:url action="urlTagAction.action" >
        <s:param name="id">123</s:param>
    </s:url> 
    

    输出

     /Struts2Example/urlTagAction.action?id=123 
    
  4. Create an Action URL with a “name” parameter, and combine with <s:a> tag via <s:property>.

     <s:url action="urlTagAction.action" var="urlTag" >
        <s:param name="name">mkyong</s:param>
    </s:url>
    <a href="<s:property value="#urlTag" />" >URL Tag Action (via property)</a> 
    

    输出

     <a href="/Struts2Example/urlTagAction.action?name=mkyong" >URL Tag Action (via property)</a> 
    
  5. Create an Action URL with a “age” parameter, and combine with <s:a> tag via “%{urlTag}“.

     <s:url action="urlTagAction.action" var="urlTag" >
        <s:param name="age">99</s:param>
    </s:url>
    <s:a href="%{urlTag}">URL Tag Action (via %)</s:a> 
    

    输出

     <a href="/Struts2Example/urlTagAction.action?age=99">URL Tag Action (via %)</a> 
    

完整的 JSP 页面代码…

URL . JSP

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

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

<ol>
<li>
<img src="<s:url valueimg/man.jpg"/>" />
</li>

<li>
<a href="<s:url value="http://www.google.com"  />" target="_blank">Google</a>
</li>

<li>
<s:url action="urlTagAction.action" >
    <s:param name="id">123</s:param>
</s:url>
</li>

<li>
<s:url action="urlTagAction.action" var="urlTag" >
    <s:param name="name">mkyong</s:param>
</s:url>
<a href="<s:property value="#urlTag" />" >URL Tag Action (via property)</a>
</li>

<li>
<s:url action="urlTagAction.action" var="urlTag" >
    <s:param name="age">99</s:param>
</s:url>
<s:a href="%{urlTag}">URL Tag Action (via %)</s:a>
</li>

</ol>

</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="urlTagAction" 
		class="com.mkyong.common.action.URLTagAction" >
		<result name="success">pages/url.jsp</result>
	</action>

    </package>		
</struts> 

4.演示

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

输出

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

参考

  1. Struts 2 Url 标记文档

struts2 url

Struts DispatchAction 示例

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

DispatchAction 类(org . Apache . struts . Actions . dispatch action)提供了一种将所有相关函数分组到单个 action 类中的方法。这是一种有用机制,可以避免为每个函数创建单独的 action 类。

Download this Struts DispatchAction example – Struts-DispatchAction-Example.zip

要实现这个机制,您的 Action 类需要扩展org . Apache . struts . actions . dispatch action类,这个 action 类不需要像普通 action 类那样实现 execute() 方法。相反,DispatchAction 类将根据传入的请求参数执行方法—方法。例如,如果参数是“method=chinese”,那么将执行 chinese()方法。

例子

action 类扩展了 DispatchAction,并包含四种方法来将 locale 设置到本地化的 Struts 会话属性中。

 public class LanguageSelectAction extends DispatchAction{

	public ActionForward chinese(ActionMapping mapping,ActionForm form,
		HttpServletRequest request,HttpServletResponse response) 
	throws Exception {

		request.getSession().setAttribute(
				Globals.LOCALE_KEY, Locale.SIMPLIFIED_CHINESE);

		return mapping.findForward("success");
	}

	public ActionForward english(ActionMapping mapping,ActionForm form,
		HttpServletRequest request,HttpServletResponse response) 
	throws Exception {

		request.getSession().setAttribute(
				Globals.LOCALE_KEY, Locale.ENGLISH);

		return mapping.findForward("success");
	}

	public ActionForward german(ActionMapping mapping,ActionForm form,
		HttpServletRequest request,HttpServletResponse response) 
	throws Exception {

		request.getSession().setAttribute(
				Globals.LOCALE_KEY, Locale.GERMAN);

		return mapping.findForward("success");
	}

	public ActionForward france(ActionMapping mapping,ActionForm form,
		HttpServletRequest request,HttpServletResponse response) 
	throws Exception {

		request.getSession().setAttribute(
				Globals.LOCALE_KEY, Locale.FRANCE);

		return mapping.findForward("success");
	}

} 

这个 Struts html 标记将执行 chinese()方法。

Chinese

这个 Struts html 标记将执行 english()方法。

English

这个 Struts html 标记将执行 german()方法。

German

这个 Struts html 标记将执行 france()方法。

France

struts外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 (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/20190223075601/http://route.carambo.la/inimage/getlayer?pid=myky82&did=112239&wid=0’)

struts–从网站下载文件示例

原文:http://web.archive.org/web/20230101150211/http://www.mkyong.com/struts/struts-download-file-from-website-example/

要让用户从您的 Struts web 项目下载文件,您必须通知" HttpServletResponse "返回一个应用程序文件,而不是普通的 HTML 页面。

 response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition",
"attachment;filename=downloadfilename.csv"); 

在服务器端,你可以从三种不同的方式获得下载文件

1.文件系统

从文件系统获取

 FileInputStream in = 
  new FileInputStream(new File("C:\\filename.zip")); 
2.项目 web 路径

假设您的文件位于“http://yourname.com/StrutsExample/upload/filename.zip”,并且“支撑示例是您的项目名称(serlvet 上下文)。

 //jndi:/yourname.com/StrutsExample/upload/filename.zip
URL url = getServlet().getServletContext().getResource("upload/filename.zip");
InputStream in = url.openStream(); 
3.字节数组

如果您从数据库中检索文件或 blob 数据,它通常以字节数组的形式返回。

 byte[] bytes = new byte[4096];
InputStream in = new ByteArrayInputStream(bytes); 

Download this Struts download file example – Struts-Download-File-Example.zip

1.动作类

一个 action 类,返回一个应用程序文件而不是普通的 HTML 页面,并获得“superfish.zip”文件供用户下载。

 package com.mkyong.common.action;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;

import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class DownloadFileAction extends Action{

   @Override
   public ActionForward execute(ActionMapping mapping, ActionForm form,
     HttpServletRequest request, HttpServletResponse response)
     throws Exception {

     //return an application file instead of html page
     response.setContentType("application/octet-stream");
     response.setHeader("Content-Disposition","attachment;filename=superfish.zip");

     try 
     {
       	//Get it from file system
       	FileInputStream in = 
      		new FileInputStream(new File("C:\\superfish.zip"));

        //Get it from web path
        //jndi:/localhost/StrutsExample/upload/superfish.zip
        //URL url = getServlet().getServletContext()
        //               .getResource("upload/superfish.zip");
        //InputStream in = url.openStream();

        //Get it from bytes array
        //byte[] bytes = new byte[4096];
        //InputStream in = new ByteArrayInputStream(bytes);

        ServletOutputStream out = response.getOutputStream();

        byte[] outputByte = new byte[4096];
        //copy binary content to output stream
        while(in.read(outputByte, 0, 4096) != -1){
        	out.write(outputByte, 0, 4096);
        }
        in.close();
        out.flush();
        out.close();

     }catch(Exception e){
    	e.printStackTrace();
   }

   return null;
  }
} 

2.JSP 页面

<%@taglib uri="http://struts.apache.org/tags-html" prefix="html"%>

Download file from server - 
struts-tutorial.zip 

3.struts-config.xml

Struts 配置文件。

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" 
"http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd">

<struts-config>

	<action-mappings>

		<action
			path="/DownloadPage"
			type="org.apache.struts.actions.ForwardAction"
			parameter="/pages/display.jsp"/>

		<action
			path="/DownloadIt"
			type="com.mkyong.common.action.DownloadFileAction"
			>
		</action>

	</action-mappings>

</struts-config> 

4.测试一下

http://localhost:8080/struts example/download page . do

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

Struts DynaActionForm 示例

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

Struts DynaActionForm 类是一个有趣的特性,它允许您以动态和声明的方式创建表单 bean。它使您能够在 Struts 配置文件中创建一个“虚拟”表单 bean,而不是创建一个真正的 Java 表单 bean 类。它可以避免您创建许多简单但繁琐的表单 bean 类。

例如,DynaActionForm 包含一个“用户名”属性。

 <form-bean name="dynaUserForm"   
	type="org.apache.struts.action.DynaActionForm">
    <form-property name="username" type="java.lang.String"/>
</form-bean> 

“DynaActionForm”和“ActionForm”的区别

  • 创建真正的 Java 类不需要 DynaActionForm(只需在 Struts 配置文件中声明),但 ActionForm 需要。
  • 在 DynaActionForm 中,表单验证是在 Action 类中实现,而 ActionForm 是在自己的类中实现的。

DynaActionForm 示例

Strutshtml:texttextbox 示例将被重构为使用“DynaActionForm”而不是普通的“ActionForm”。

Download Struts DynaActionForm example – Struts-DynaActionForm-Example.zip

1.struts-config.xml

在 Struts 配置文件中声明“DynaActionForm ”,并像 normal 一样将其链接到 Action 类。

struts-config.xml

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" 
"http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd">

<struts-config>

	<form-beans>
		<!--<form-bean
			name="userForm"
			type="com.mkyong.common.form.UserForm"/>
		-->
		<form-bean name="dynaUserForm"   
		      type="org.apache.struts.action.DynaActionForm">
		      <form-property name="username" type="java.lang.String"/>
		</form-bean>

	</form-beans>

	<action-mappings>

	        <action
			path="/LoginPage"
			type="org.apache.struts.actions.ForwardAction"
			parameter="/pages/login.jsp"/>

		<action
			path="/Login"
			type="com.mkyong.common.action.UserAction"
			name="dynaUserForm"
			>	

			<forward name="success" path="/pages/welcome.jsp"/>
			<forward name="failed" path="/pages/login.jsp"/>

		</action>
	</action-mappings>

	<message-resources
		parameter="com.mkyong.common.properties.Common" />

</struts-config> 

2.行动

将所有表单验证方法移动到 Action 类中,通过“ get() ”方法获取“DynaActionForm”属性。

user action . Java

 package com.mkyong.common.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.DynaActionForm;

public class UserAction extends Action{

	public ActionForward execute(ActionMapping mapping,ActionForm form,
		HttpServletRequest request,HttpServletResponse response) 
        throws Exception {

		DynaActionForm userForm = (DynaActionForm)form;

		ActionMessages errors = new ActionMessages();

		//do the form validation in action class
	    if( userForm.get("username") == null || 
                         ("".equals(userForm.get("username")))) {

	       errors.add("common.name.err",
                    new ActionMessage("error.common.name.required"));

	    }

	    saveErrors(request,errors);

	    if(errors.isEmpty()){
	        return mapping.findForward("success");
	    }else{
	        return mapping.findForward("failed");
	    }

	}

} 

结论

你应该选择 DynaActionForm 吗?此功能可以节省您创建 ActionForm 类的大量时间,但是它有局限性,有时您必须使用真正的 ActionForm 来完成某些任务。在大型项目环境中,维护总是要考虑的第一优先事项,您必须创建一个“表单标准”来遵循,混合使用这两者是不实际的,除非您有非常坚实的理由来支持。就我个人而言,我很少使用 DynaActionForm,有了 Eclipse IDE,ActionForm 毕竟不是很难创建。

hello botsstruts

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值