1 struts2的action接收参数可以通过set和get方法。首先将属性添加set和get方法。然后struts2会通过反射(有set和get方法)自动对属性进行实例化。达到java中的new一个对象的目的。
2 有两种情况下,struts2会自动反射进行实例化。第一种是在配置文件中对属性进行配置。
如:<bean name="examples" class="com.example.bean.Example" scope="prototype">
</bean>
<bean name="exampleAction" class="com.example.action.ExampleAction" scope="prototype">
<property name="exampleService" ref="exampleService"></property>
<property name="bean" ref="examples"></property>
</bean>
<action name="exampleSer" class="exampleAction">
<result name="success">/jsp/example/example_query.jsp</result>
</action>
解释(前提是action中要有bean的set和get方法):
首先是将bean的属性配置在配置文件中。
其次是将action中的bean的属性,通过ref来进行赋值引用
最后在struts中引用该action
一般情况下都这么在配置文件中进行配置即可。
3还有一种情况说明下(前提是action中要有bean的set和get方法):当配置文件中如果没有对action属性进行赋值引用 ,而在url中有action的属性。在这种情况下,struts2也会自动进行反射处理。达到java中的new一个实例化的目的
如:
<bean name="exampleAction" class="com.example.action.ExampleAction" scope="prototype">
<property name="exampleService" ref="exampleService"></property>
</bean>
<action name="exampleSer" class="exampleAction">
<result name="success">/jsp/example/example_query.jsp</result>
</action>
以上的struts配置文件中没有对bean进行ref赋值引用。而url中:exampleSer!query?bean.id=1 这时struts也会对bean进行反射实例化处理。
总结:把action中的bean属性在配置文件中进行配置。这是最好的方法。无论url中有没有action的bean属性。struts都会进行反射实例化处理。
故:始终将action的bean属性在配置文件中进行配置(前提是bean属性必须有set和get方法)
完整的例子:
package com.example.action;
import java.util.List;
import com.example.bean.Example;
import com.example.service.interfaces.ExampleService;
import com.opensymphony.xwork2.ActionSupport;
public class ExampleAction extends ActionSupport{
private Example bean;
private ExampleService exampleService;
public ExampleAction() {
super();
// TODO Auto-generated constructor stub
}
public Example getBean() {
return bean;
}
public void setBean(Example bean) {
this.bean = bean;
}
public ExampleService getExampleService() {
return exampleService;
}
public void setExampleService(ExampleService exampleService) {
this.exampleService = exampleService;
}
public String query(){
System.out.println("query");
List<Example> lists=this.exampleService.query(bean);
System.out.println("size:"+lists.size());
if(bean!=null){
bean.setResultLists(lists);
}else{
System.out.println("bean is null");
}
return "success";
}
public String queryMethod(){
System.out.println("queryMethod");
List<Example> lists=this.exampleService.query(bean);
System.out.println("size:"+lists.size());
if(bean!=null){
bean.setResultLists(lists);
}else{
System.out.println("bean is null");
}
return "success";
}
}
struts.xml
<action name="exampleSer" class="exampleAction">
<result name="success">/jsp/example/example_query.jsp</result>
</action>
spring配置文件:
<bean name="examples" class="com.example.bean.Example" scope="prototype">
</bean>
<bean name="exampleDao" class="com.example.dao.impl.ExampleDaoImpl">
<property name="sqlMapClient" ref="sqlMapClient"></property>
</bean>
<bean name="exampleService" class="com.example.service.impl.ExampleServiceImpl">
<property name="exampleDao" ref="exampleDao"></property>
</bean>
<bean name="exampleAction" class="com.example.action.ExampleAction" scope="prototype">
<property name="exampleService" ref="exampleService"></property>
<property name="bean" ref="examples"></property>
</bean>
example_query.jsp(迭代标签进行处理):
<table class="table_css">
<tr>
<td>id</td>
<td>name</td>
<td>remark</td>
</tr>
<s:if test="#request.bean.resultLists!=null&&#request.bean.resultLists.size()>0">
<s:iterator id="exampleLists" value="#request.bean.resultLists" status="">
<tr>
<td>
<s:property value="#exampleLists.id"/>
</td>
<td>
<s:property value="#exampleLists.name"/>
</td>
<td>
<s:property value="#exampleLists.remark"/>
</td>
</tr>
</s:iterator>
</s:if>
</table>
2 有两种情况下,struts2会自动反射进行实例化。第一种是在配置文件中对属性进行配置。
如:<bean name="examples" class="com.example.bean.Example" scope="prototype">
</bean>
<bean name="exampleAction" class="com.example.action.ExampleAction" scope="prototype">
<property name="exampleService" ref="exampleService"></property>
<property name="bean" ref="examples"></property>
</bean>
<action name="exampleSer" class="exampleAction">
<result name="success">/jsp/example/example_query.jsp</result>
</action>
解释(前提是action中要有bean的set和get方法):
首先是将bean的属性配置在配置文件中。
其次是将action中的bean的属性,通过ref来进行赋值引用
最后在struts中引用该action
一般情况下都这么在配置文件中进行配置即可。
3还有一种情况说明下(前提是action中要有bean的set和get方法):当配置文件中如果没有对action属性进行赋值引用 ,而在url中有action的属性。在这种情况下,struts2也会自动进行反射处理。达到java中的new一个实例化的目的
如:
<bean name="exampleAction" class="com.example.action.ExampleAction" scope="prototype">
<property name="exampleService" ref="exampleService"></property>
</bean>
<action name="exampleSer" class="exampleAction">
<result name="success">/jsp/example/example_query.jsp</result>
</action>
以上的struts配置文件中没有对bean进行ref赋值引用。而url中:exampleSer!query?bean.id=1 这时struts也会对bean进行反射实例化处理。
总结:把action中的bean属性在配置文件中进行配置。这是最好的方法。无论url中有没有action的bean属性。struts都会进行反射实例化处理。
故:始终将action的bean属性在配置文件中进行配置(前提是bean属性必须有set和get方法)
完整的例子:
package com.example.action;
import java.util.List;
import com.example.bean.Example;
import com.example.service.interfaces.ExampleService;
import com.opensymphony.xwork2.ActionSupport;
public class ExampleAction extends ActionSupport{
private Example bean;
private ExampleService exampleService;
public ExampleAction() {
super();
// TODO Auto-generated constructor stub
}
public Example getBean() {
return bean;
}
public void setBean(Example bean) {
this.bean = bean;
}
public ExampleService getExampleService() {
return exampleService;
}
public void setExampleService(ExampleService exampleService) {
this.exampleService = exampleService;
}
public String query(){
System.out.println("query");
List<Example> lists=this.exampleService.query(bean);
System.out.println("size:"+lists.size());
if(bean!=null){
bean.setResultLists(lists);
}else{
System.out.println("bean is null");
}
return "success";
}
public String queryMethod(){
System.out.println("queryMethod");
List<Example> lists=this.exampleService.query(bean);
System.out.println("size:"+lists.size());
if(bean!=null){
bean.setResultLists(lists);
}else{
System.out.println("bean is null");
}
return "success";
}
}
struts.xml
<action name="exampleSer" class="exampleAction">
<result name="success">/jsp/example/example_query.jsp</result>
</action>
spring配置文件:
<bean name="examples" class="com.example.bean.Example" scope="prototype">
</bean>
<bean name="exampleDao" class="com.example.dao.impl.ExampleDaoImpl">
<property name="sqlMapClient" ref="sqlMapClient"></property>
</bean>
<bean name="exampleService" class="com.example.service.impl.ExampleServiceImpl">
<property name="exampleDao" ref="exampleDao"></property>
</bean>
<bean name="exampleAction" class="com.example.action.ExampleAction" scope="prototype">
<property name="exampleService" ref="exampleService"></property>
<property name="bean" ref="examples"></property>
</bean>
example_query.jsp(迭代标签进行处理):
<table class="table_css">
<tr>
<td>id</td>
<td>name</td>
<td>remark</td>
</tr>
<s:if test="#request.bean.resultLists!=null&&#request.bean.resultLists.size()>0">
<s:iterator id="exampleLists" value="#request.bean.resultLists" status="">
<tr>
<td>
<s:property value="#exampleLists.id"/>
</td>
<td>
<s:property value="#exampleLists.name"/>
</td>
<td>
<s:property value="#exampleLists.remark"/>
</td>
</tr>
</s:iterator>
</s:if>
</table>