struts2之action接收引數方法(get_set方法)
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>