`
jaesonchen
  • 浏览: 309866 次
  • 来自: ...
社区版块
存档分类
最新评论

struts 自动填充和访问ValueStack

 
阅读更多
add.jsp:
  
<body>
    <s:form action="AddUserAction">
  		<s:textfield name="user.userName" label="Your name" />
  		<s:textfield name="user.address.address" label="Your address" />
  		<s:textfield name="user.address.zipCode" label="Your zipCode" />
  		<s:textfield name="user.address.phone" label="Your phone" />
  		<s:textfield name="array" label="不使用下标的数组" />
  		<s:textfield name="array" label="不使用下标的数组" />
  		<s:textfield name="initArray[0]" label="使用下标的数组" />
  		<s:textfield name="initArray[1]" label="使用下标的数组" />
  		<s:textfield name="list[0]" label="List" />
  		<s:textfield name="list[1]" label="List" />
  		<s:textfield name="map['user1'].userName" label="Map" />
  		<s:textfield name="map.user2.userName" label="Map" />
  		<s:submit/>
  	</s:form>
  </body>

 

success.jsp:

  <body>
  	<h4>User: <s:property value="user.userName" /> add success.</h4>
    <h4>Address:<s:property value="user.address.address" /></h4>
    <h4>zipCode:<s:property value="user.address.zipCode" /></h4>
    <h4>phone  :<s:property value="user.address.phone" /></h4>
    <!-- set 将对象设置为ActionContext中的属性映射,默认作用域是Action -->
    <s:set name="username" scope="session" value="user.userName" />
    <h4>Hello <s:property value="#session['username']" /></h4>
    <!-- push 将ActionContext中的对象放入ValueStack顶端,方便标签内访问。 -->
    <s:push value="user">
    <h4>Show userName(<s:property value="userName" />) by push user in ValueStack.</h4>
    </s:push>
    <!-- bean 创建一个类的实例,默认放置在ValueStack中,标签外访问需要设置var为实例指定一个引用,该引用会作为命名参数存在于ActionContext -->
    <s:bean name="com.jaeson.hibernatestudy.bean.User" var="bean">
    	<s:param name="userName">jaesonchen</s:param>
    	<h4>User bean for User.getUserName()=<s:property value="getUserName()" /></h4>
    </s:bean>
    
    <s:if test="#bean.userName == 'jaesonchen1'">
    	<h4>if show #bean.userName=<s:property value="#bean.userName" /></h4>
    </s:if>
    <s:elseif test="user.address.zipCode == 100086">
    	<h4>elseif show user.zipCode=<s:property value="user.address.zipCode" /></h4>
    </s:elseif>
    <s:else>
    	<h4>else show nothing</h4>
    </s:else>
    
    <!-- iterator 遍历Collection Map Enum Iterator Array,支持在ActionContect中定义一个保存遍历状态的变量 -->
    <s:iterator value="array" status="itStatus">
    	<li>
    	<s:property value="#itStatus.count" />
    	<s:property value="array[#itStatus.index]" />
    </s:iterator>
    <s:iterator value="list" status="itStatus">
    	<li>
    	<s:property value="#itStatus.count" />
    	<s:property />
    </s:iterator>
    <s:iterator value="map" status="itStatus">
    	<li>
    	<s:property value="key" />
    	<s:property value="value.userName" />
    </s:iterator>
    <!-- Map遍历的类型为Entry(key, value),默认情况下listKey指向key,listValue指向value -->
    <s:select name="selectList" list="{'chenzq','jaeson','jaesonchen'}" label="select a name"/>
    <s:select name="selectList" list="list" label="select a num"/>
    <s:select name="selectMap" list="map" listValue="value.userName" label="select a username"/>
    <s:radio name="radioList" list="{'chenzq','jaeson','jaesonchen'}" label="radio a name" />
  </body>

  

import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.context.annotation.Scope;

import com.opensymphony.xwork2.ActionSupport;
import com.jaeson.hibernatestudy.bean.User;
import com.jaeson.springstudy.service.CommonService;

@SuppressWarnings("all")
@Scope("prototype")
@Controller("userAction")
public class UserAction extends ActionSupport {

	@Override
	public String execute() {
		
		this.getCommonService().saveOrUpdate(this.getUser());
		//throw new RuntimeException("throw in UserAction");
		return SUCCESS;
	}
	
	@Override
	public void validate() {
		
		if (this.getUser().getUserName().length() == 0) {
			this.addFieldError("user.userName", "userName is required.");
		}
	}
	/**
	 * 使用相同名字array提交时,不需要初始化数组。
	 * 使用initArray[0]提交时,必须初始化数组,否则初始化错误 ognl.OgnlException: target is null for setProperty。
	 * List Map等集合类型时,两种提交方式都不能初始化集合。
	 * 在类型转换错误需要返回input时,使用无下标提交的集合每一个输入框都会显示全部的集合内容,最佳实践使用集合下标。
	 */
	private String[] array;
	private double[] initArray = new double[10];
	private List<Integer> list;
	private Map<String, User> map;
	private User user;
	@Resource(name = "commonService")
	private CommonService commonService;
	public User getUser() {
		return this.user;
	}

	public void setUser(User user) {
		this.user = user;
	}
	
	public String[] getArray() {
		return array;
	}

	public void setArray(String[] array) {
		this.array = array;
	}

	public double[] getInitArray() {
		return initArray;
	}

	public void setInitArray(double[] initArray) {
		this.initArray = initArray;
	}

	public List<Integer> getList() {
		return list;
	}

	public void setList(List<Integer> list) {
		this.list = list;
	}	

	public Map<String, User> getMap() {
		return map;
	}

	public void setMap(Map<String, User> map) {
		this.map = map;
	}

	public CommonService getCommonService() {
		return this.commonService;
	}

	public void setCommonService(CommonService commonService) {
		this.commonService = commonService;
	}
	
}

 

struts.xml:

<action name="AddUserAction" class="userAction">
   <result name="success">/success.jsp</result>
   <result name="input">/add.jsp</result>
  </action>

 

分享到:
评论

相关推荐

    Struts用的ognl和valueStack(vs)实例

    在Struts中,OGNL(Object-Graph Navigation Language)和Value Stack(VS)是两个核心概念,它们对于理解Struts的工作原理至关重要。 **OGNL:对象图导航语言** OGNL是一种强大的表达式语言,它允许在对象图中进行...

    Struts2中访问web元素的例子

    // paramName已自动填充为请求参数值 System.out.println(paramName); return SUCCESS; } } ``` 在JSP页面中,可以通过OGNL表达式访问这些属性。 3. **ActionSupport类的便利方法** Struts2提供了一个基类...

    Struts2和Struts1的什么区别

    - `ActionForm`通过`populate`方法自动填充表单数据,但其灵活性有限。 #### Struts2: - Struts2允许直接使用POJO作为模型数据,无需特定的`ActionForm`。 - 提供了`ModelDriven`接口,允许为每个Action配置不同的...

    struts1.x和struts2.x区别

    而Struts2.x则更加灵活,可以直接将Action作为数据绑定的目标,利用其强大的数据绑定机制(包括OGNL表达式语言)进行数据的自动填充和转换,同时也支持传统的ActionForm模式,但提供了更丰富的数据绑定选项和更简单...

    Struts2访问Web元素

    当用户提交表单时,Struts2会自动将表单数据填充到对应的Action属性中,无需手动获取HTTP请求参数。 此外,Struts2还提供了丰富的插件系统,如Tiles插件,可以方便地进行页面布局。同时,Struts2与Spring框架的集成...

    struts2基本知识

    Struts2通过值栈(ValueStack)管理请求范围内的数据,这使得开发者能够在控制器和视图之间传递数据变得非常简单。 ##### 1. 值栈(ValueStack) - **自动注入**: 当用户提交表单时,表单的数据会被自动填充到对应的...

    Struts2和Struts1的一些区别

    当表单提交后,Struts1会自动将表单数据填充到ActionForm对象中。相比之下,Struts2可以直接使用普通的Java对象(即POJO)作为数据模型,并提供了多种数据绑定机制,包括ModelDriven机制,允许为每个Action指定一个...

    Struts2与Struts1的对比

    - **Struts2**:除了支持JSTL外,还引入了强大的OGNL表达式语言,这使得开发者可以在页面上轻松访问Action中的数据和执行方法。 #### 五、绑定值到页面(View) - **Struts1**:通常使用标准JSP标签来展示数据。 ...

    Struts2_入门篇_基本配置_通配符_参数注入_内置对象获取等。。。

    Action类可以引用Form类实例,Struts2会自动将表单提交的数据填充到Form实例中。Form类可以通过注解`@Namespace`、`@Result`等进行配置,以指定其在应用中的作用域和处理结果。 6. **结果类型(Result Type)**:...

    Struts2框架基础 二

    通过以上内容,我们可以看到Struts2框架不仅提供了强大的功能,如OGNL表达式语言和ValueStack数据管理工具,还允许开发者通过自定义拦截器等方式来扩展框架的行为,从而满足更加复杂的应用场景需求。这对于理解和...

    struts2学习笔记

    **Object-Graph Navigation Language (OGNL)** 是 **Struts2** 中用来访问和设置对象属性的强大工具。OGNL 提供了一种简单而强大的语法来访问 Java 对象模型中的属性值。 - **OGNL 基本用法**: - `Ognl.getValue...

    学习OGNL在Struts2中工作原理

    它是Struts2框架的一个核心特性之一,被广泛应用于框架的数据访问、表单填充等方面。 #### Struts2与OGNL的关系 Struts2框架采用了OGNL作为其默认的表达式语言,它通过OGNL实现了对Java对象的灵活操作。Struts2的...

    struts2验证框架参数

    `expression`参数包含OGNL表达式,而`valueStack`参数决定是否在表达式中访问`ValueStack`对象。 #### `email` 和 `url` 这两个验证器分别用于电子邮件地址和URL的格式验证,确保字段中的值符合标准格式。 #### `...

    传智播客struts2.1源代码_接收请求参数

    Struts2会自动将请求参数值填充到这个属性中,无需手动获取。 2. **使用Parameters拦截器**:Struts2的拦截器机制使得在Action执行前可以进行预处理,Parameters拦截器就是负责处理请求参数的。它会遍历请求的所有...

    JSP&Struts课件

    - **ValueStack**:Struts2的ValueStack机制,使得模型对象的属性可以直接在JSP页面中访问,增强了数据的传递和展示。 4. **JSP的EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)** -...

    struts2标签库详解

    - 结合OGNL(Object-Graph Navigation Language)表达式,动态地访问和操作对象属性,实现灵活的数据绑定。 以上是对Struts2标签库的详细概述,涵盖了常用标签的使用方法和注意事项。了解并熟练应用这些标签,能够...

    jfreeChart+ struts+数据库,柱形图开发,直接能用

    同时,Struts2框架允许通过ValueStack和OGNL表达式来方便地在Action和视图之间传递数据。 接着,我们提到**数据库**,在这个项目中,可能是用来存储和检索生成图表所需的数据。开发者需要先建立相应的数据库表,并...

    struts 类型转换

    无论是哪种方式,一旦表单提交,Struts会自动将请求参数值填充到对应的ActionForm或Action类属性中,这个过程就涉及到了类型转换。 至于标签的使用,Struts提供了一系列的自定义标签,如`html`、`bean`、`logic`等...

    Struts2内置拦截器简介

    在Action执行前,框架会自动实例化模型对象,并填充到`ValueStack`中。 15. **Scoped Model Driven (范围模型驱动)** - **功能**:类似于Model Driven,但支持指定模型的作用域,如Session或Request。这样可以在...

Global site tag (gtag.js) - Google Analytics