struts
Posted m97i
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts相关的知识,希望对你有一定的参考价值。
struts2
<!-- 开启使用开发模式,详细错误提示 -->
<!-- <constant name="struts.devMode" value="true"/>-->
<!-- 指定每次请求到达,重新加载资源文件 -->
<!-- <constant name="struts.i18n.reload" value="true"/>-->
<!-- 指定每次配置文件更改后,自动重新加载 -->
<!-- <constant name="struts.configuration.xml.reload" value="true"/>-->
<!-- 指定XSLT Result使用样式表缓存 -->
<!-- <constant name="struts.xslt.nocache" value="true"/>-->
动态方法 需要先在struts.xml配置
<contant name="struts.enable.DynamicMethodInvocation" value="true"/>
url:http://localhost:8090/test/user/loginSuccess!fail //!fail直接调用fail方法
<action name="loginSuccess" class="action.userAction">
<action name="loginSuccess" class="action.userAction">
<result name="admin" type="chain">admin(对应action的name)</result>
<result name="comm" type="chain">comm</result>
</action>
<action name="admin">
<result>/loginSuccess.jsp</result>
</action>
<action name="comm">
<result>/index.jsp</result>
</action>
form表单页面跳转action绝对路径
<form action="${pageContext.request.contextPath}/...jsp" ../>
用相对路径会不断追加
===>如何获得session
ActionContext.getContext().getSession(); 返回Map<String,Object>
得到session->
Map<String, Object> session=ActionContext.getContext().getSession();
session.put("user", user);
//${user.userName}
//<s:property value="#session.address" />
得到application->
Map<String, Object> application=ActionContext.getContext().getApplication();
if(application.get("num")!=null){
Integer integer=(Integer)application.get("num");
application.put("num", integer+1);
}else{
application.put("num", 1);
}
//${num}
得到请求->
Map<String, Object> request=(Map<String, Object>)ActionContext.getContext.get("request");
request.put("address","北京");
//${address}
//<s:property value="#request.address" />
//在页面中使用s标签 顶部添加<%@taglib prefix="s" uri="/struts.tags" %>
得到参数->
Map<String, Object> parameter=ActionContext.getContext().getParameter();
String[] args=(String[])parameter.get("user.userName");
system.out.println(args[0]);
也可以实现requestAware,SessionAware,ApplicationAware接口的set方法
访问servlet api的两种
1. ActionContext.getContext().get("request")
2.实现接口RequestAware
OGNL=====对象图导航语言=======================>
页面获取,输出action属性
<s:property value="address" />
页面获取request保存的数据
<s:property value="#request.address" />
<s:set var="变量名" value="user.userName" scope="request" >
//scope默认request域
<s:property value="#request.变量名">
或者<s:property value="#变量名">
<s:set>标签的值保存在stack context栈上下文里
<s:date> name:被格式的值 format:格式化日期 yyyy-MM-dd
<s:debug/> 查看值栈,栈上下文
<s:property value="houses.{?#this.houseId==1}.{title}" />
//过滤内容的写法 集合的?表示任何 返回一个title的数组
<s:url action="house" var="housePage"></s:url>
<s:url action="house!error" var="housePage"></s:url>
//调用action为house的error方法
//指定s:url的var属性则不会在页面生成字符串 需要再设置s:a标签
<s:a href="#housePage">housePage</s:a>
转化成ognl表达式 s:a href="%{#housePage}"
<s:include value=".jsp">
<s:param name="type" value="1"></s:param>
</s:include>
//s:param 参数不会放进stack context里 所以不能用s:property
要用el表达式取值 ${param.type}
ognl变为字符串
<s:property value="‘<hr/>‘" escapehtml="false" />
字符串变为ognl
<s:a href="%{#houseUrl}">超链接</s:a>
% # $ 应用场景
%{} 该字符串按照ognl表达式处理
# <s:property value="#request.name" />
控制标签===============================>
<s:if> <s:else> <s:elseif>
--------------------------------->
<s:iterator var="houseItem" value="houses" status="idx">
<s:if test="#idx.odd">
<tr bgcolor="gray">
</s:if>
<s:if test="#idx.even">
<tr bgcolor="blue">
</s:if>
<td><s:property value="#houseItem.houseId"/></td>
<td><s:property value="#houseItem.title"/></td>
<td><s:property value="#houseItem.houseType.typeName"/></td>
<td><s:property value="#houseItem.street.streetName"/></td>
<td><s:date name="#houseItem.addDate" format="yyyy-MM-dd"/></td>
</s:iterator>
//使用<s:propery value="#idx.index"/> 得到每次循环的下标 从0开始
//使用<s:propery value="#idx.count"/> 得到集合含有多少个对象 等价size()
UI标签================================>
<constant name="struts.ui.theme" value="simple"></constant>
<s:form> <s:text> <s:textarea> <s:textfield> <s:submit>
下拉框
<s:select name="houseTypeId" list="集合" listkey="typeId" listvalue="typeName"></s:select>
//listvalue要显示数据 listkey是显示数据的值
联动需要集合
Map<District,Set<street>> map = new HashMap<District,Set<street>>();
并且要getset方法
<s:form action="add" method="post" theme="simple">
<s:doubleselect
list="map.keySet()" name="district" listKey="districtId" listValue="districtName"
doubleList="map.get(top)" doubleName="street" doubleListKey="streetId" doubleListValue="streetName"/>
</s:form>
//list的值是map.keySet可以获得所有的键 即得到所有的district对象
//name的值是district对象 listKey是显示出来数据的值 listValue是显示出来的数据
//doubleList是map.get(top) 可以获得列表的第一个所选键的值
//doubleName,doubleListKey,doubleListValue和name,listKey,listValue意义相同
<s:property value="#session.street.streetId"/>
<s:property value="#session.street.streetName"/>
<s:property value="streets[2].streetId"/>
<s:property value="streets[2].streetName"/>
--------------->遍历
<s:iterator var="street" value="streets" status="status">
<br/>
street.streetId<s:property value="#street.streetId"/><br/>
street.streetName<s:property value="#street.streetName"/><br/>
street.district.districtId<s:property value="#street.district.districtId"/><br/>
street.district.districtName<s:property value="#street.district.districtName"/><br/>
</s:iterator>
以上是关于struts的主要内容,如果未能解决你的问题,请参考以下文章