您的位置:首页 > 编程语言 > Java开发

struts2使用OGNL表达式

2017-01-22 00:00 387 查看
摘要: struts2使用OGNL表达式

Product.java

package com.huangliusong.entities;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.util.ValueStack;

public class Product {
private Integer productId;
private String productname;
private String productdesc;
private Double productprice;

@Override
public String toString() {
return "Product [productId=" + productId + ", productname="
+ productname + ", productdesc=" + productdesc
+ ", productprice=" + productprice + "]";
}

public Product() {
super();
// TODO Auto-generated constructor stub
}

public Integer getProductId() {
return productId;
}

public void setProductId(Integer productId) {
this.productId = productId;
}

public String getProductname() {
return productname;
}

public void setProductname(String productname) {
this.productname = productname;
}

public String getProductdesc() {
return productdesc;
}

public void setProductdesc(String productdesc) {
this.productdesc = productdesc;
}

public Double getProductprice() {
return productprice;
}

public void setProductprice(Double productprice) {
this.productprice = productprice;
}

public String save() {
System.err.println("details" + this);
// 获取值栈对象
ValueStack valueStack = ActionContext.getContext().getValueStack();
// 创建Test对象 并且为属性赋值
Test test = new Test();
test.setProductdesc("cpp-desc");
test.setProductname("cpp");
// 把 Test对象压栈 到值栈的栈顶
valueStack.push(test);
return "details";
}
}


Test.java

package com.huangliusong.entities;

public class Test {
public String getProductname() {
return productname;
}
public void setProductname(String productname) {
this.productname = productname;
}
public String getProductdesc() {
return productdesc;
}
public void setProductdesc(String productdesc) {
this.productdesc = productdesc;
}
private String productname;
private String productdesc;
}

node.txt

1.关于值栈

1)${productName}值 并不在request域中 而是在值栈中 获取的
2)valueStack

I 可以从actionContext中取值栈的对象
II值栈可以分为两个逻辑部分

>MAP栈 实际上是OgnlContext 类型  里面保存着各种map
requestMap sessionMap parameterMap attribute
>对象map 实际上是Componen类型 是一个使用ArrayList定义的栈 里面保存和	当前Action实例相关的对象 是一个数据结构意义的栈
使用s:property标签和OGNL表达式来读取值栈中属性值

1.值栈中的属性值:
>对于对象栈:对象栈中某一个对象的属性值。
>map栈request,session,application 的一个属性值或者一个请求参数的值。

2.读取对象栈中对象的属性可以采用object.propertyName object['propertyName'] object["propertyName"]
可以通过加下标的方式进行读取:[0].message读取0对象的message属性 从第0个对象进行搜索 可以结合s:property
标签s:property value="[0]message" 等同于 <s:property value="message">

action对象会被struts2自动的放到值栈里面的栈顶


struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="Product_input" >
<result>/WEB-INF/pages/input.jsp</result>
</action>
<action name="pruduct_save" class="com.huangliusong.entities.Product" method="save">
<result name="details">/WEB-INF/pages/details.jsp</result>
</action>
</package>
</struts>

details.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!-- 导入标签struts2 -->
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>商品的详细信息</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">

</head>
<s:debug></s:debug>
<body>
ID:${productId }
<br> 名字:${productname }
<br> 描述:${productdesc }
<br> 价格:${productprice }
<br>
<!-- 使用ognl读取属性 -->
使用ognl读取属性 <br>
ID:
<s:property value="[0].productId" />
<br> 名字:
<s:property value="[0].productname" />
<br> 描述:
<s:property value="[0].productdesc" />
<br> 价格:
<s:property value="[0].productprice" />
<br>

</body>
</html>


input.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>页面输入也</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
<form action="pruduct_save.action" method="post">
产品名字<input type="text" name="productname"><br> 产品描述<input
type="text" name="productdesc"><br> 产品价格<input
type="text" name="productprice"><br> <input
type="submit" value="提交">
</form>

</body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>strust2-6</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<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>
</web-app>

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>

<body>
<h1>
<a href="Product_input.action">Product_input</a>
</h1>
</body>
</html>

效果



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ognl