1:在action中定义的变量,在jsp页面中显示用:<s:property value="变量名" />
${变量名}
2:在页面中实现自动增加的序号用iterator的statuts的index属性 eg:
<s:iterator value="#request.inOutAccountList" id="data"
status="listStat">
<s:property value="#listStat.index+1"/>
</s:iterator>
3:在action类中取得request和session对象的方法
Map session = ActionContext.getContext().getSession();
HttpServletRequest request = ServletActionContext.getRequest ();
设置它们的值的方法
session.put("operation", "add");
request.setAttribute("name", name);
页面中取得它们的值:
<s:property value="#session.operation"/>
<s:property value="#request.name"/>
${requestScope.name}
4:页面中奇偶行样式不一样的控制方法:
<tr class="<s:if test='#listStat.odd == true
'>tableStyle-tr1</s:if><s:else>tableStyle-tr2</s:else>" >
5:单选框和复选框的使用方法
1):可以设置默认选中值,注意list的值的设置,通过这种方式使key和value不一样,这种方法比较常用(checkboxlist or radio)
<s:radio name="uncarInsPolicy.policyStateCode"
list="#{'5':'通过' , '2':'不通过'}"
listKey="key"
listValue="value"
value='5'
/>
2):这里的key和value的值是一样的(checkboxlist or radio)
<s:checkboxlist
list="{'Red', 'Blue', 'Green'}"
name="favoriteColor"/>
6:struts2 中的标签会生成类似由<tr><td></td></tr>构成的字串(具体什么标签生成什么,可以查看生成后的页面的源代码)如果不限制这些多余代码的生成,页面将变得无法控制,所以一般我们是不希望它生成多余的代码的,具体的设置方法如果,在struts.xml中统一配置
<constant name="struts.ui.theme" value="simple"/>加上该句即可
也可以通过在页面中将tag的theme属性设为"simple"取消其默认的表格布局 不过最好是:自定义一个theme,并将其设为默认应用到整个站点,如此一来就可以得到统一的站点风格
7:jsp页面中格式化日期的方法
<s:date name="unCarInsModificationInfo.createTime" format="yyyy-MM-dd" nice="false"/>这样就可以将日期格式化为yyyy-MM-dd的形式
8:默认情况下,当请求action发生时,Struts运行时(Runtime)根据struts.xml里的Action映射集(Mapping),实例化action对应的类,并调用其execute方法。当然,我们可以通过以下两种方法改变这种默认调用
1)在classes/sturts.xml中新建Action,并指明其调用的方法
比如想调用action类中的
public String aliasAction() {
message ="自定义Action调用方法";
return SUCCESS;
}
则在classes/sturts.xml中加入下面代码:
<action name="AliasHelloWorld" class="tutorial.HelloWorld"
method="aliasAction">
<result>/HelloWorld.jsp</result>
</action>
既可用action名调用该方法了
2)(比较常用)
访问Action时,在Action名后加上“!xxx”(xxx为方法名)。
9:Struts 2.0有两个配置文件,struts.xml和struts.properties都是放在WEB-INF/classes/下。
struts.xml用于应用程序相关的配置
struts.properties用于Struts 2.0的运行时(Runtime)的配置
10:在action类中取得web下某一文件夹物理路径(绝对路径)的方法 filePath =
ServletActionContext.getServletContext().getRealPath("/upLoadFiles")
11:要想返回的页面不是一个直接JSP页面而是要先通过返回action中的方法读取相应的数据再返回到jsp页面,有两种方法
1)在struts.xml中这么设置
<result name="list"
type="redirect-action">sysmanage/UserBaseInfoAction!findUserBaseInfo.action</result>
2)在action中返回时直接调用这个方法即可
return findList();
12:设置checkboxlist中默认值的方法
<s:checkboxlist name="skills1"
="Skills 1"
list="{ 'Java', '.Net', 'RoR', 'PHP' }"
value="{ 'Java', '.Net' }" />
<s:checkboxlist name="skills2"
label="Skills 2"
list="#{ 1:'Java', 2: '.Net', 3: 'RoR', 4: 'PHP' }"
listKey="key"
listValue="value"
value="{ 1, 2, 3 }"/>
13:二级级连下拉框
<s:set name="foobar"
value="#{'Java': {'Spring', 'Hibernate', 'Struts 2'}, '.Net': {'Linq', ' ASP.NET 2.0'}, 'Database': {'Oracle', 'SQL Server', 'DB2', 'MySQL'}}" />
<s:doubleselect list="#foobar.keySet()"
doubleName="technology"
doubleList="#foobar[top]"
label="Technology" />
14:当属性中有标签代码时,如果你想不显示这些标签代码(格式化输出),可以使用struts2标签的escape属性
<s:property value="name" escape="false"/>
15:if_esleif_else中的% #的作用
“#”主要有三种用途:
1. 访问OGNL上下文和Action上下文,#相当于
ActionContext.getContext();下表有几个ActionContext中有用的属性:
parameters 包含当前HTTP请求#parameters.id[0]作用相当于
参数的Map request.getParameter("id")
包含当前
HttpServletReques#request.userName相当于t的属性request.getAttribute("userName") (attribute)的
Map
包含当前
HttpSession的属#session.userName相当于
性(attribute)的session.getAttribute("userName")
Map request session
包含当前应用的#application.userName相当于applicatioServletContext的application.getAttribute("userNamen 属性(attribute)") 的Map
用于按request >
session > #attr.userName相当于按顺序在以上三
application顺序个范围(scope)内读取userName属性,
访问其属性直到找到为止
(attribute) attr
2. 用于过滤和投影(projecting)集合,如books.{?#this.price<100};
3. 构造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。
“%”符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。 例如在Ognl.jsp中加入以下代码:
<hr />
<h3>%的用途</h3>
<p><s:url value="#foobar['foo1']" /></p>
<p><s:url value="%{#foobar['foo1']}" /></p>
generator 标签(JSP Tag)
描述
从val属性生成一个iterator。
参数
例子
例1:
生成一个简单的iterator,并且使用iterator标签打印出内容。
<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}">
<s:iterator>
<s:property /><br/>
</s:iterator>
</s:generator>
例2:
生成一个iterator,使用count属性。因为count属性值为3,所以只有前三个内容(aaa,bbb,ccc)在生成的iterator中。
Generate an iterator with count attribute
<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="3">
<s:iterator>
<s:property /><br/>
</s:iterator>
</s:generator>
例3:
生成iterator,使用了id属性,之后生成的对象放在pageContext中,可以通过指定的id来访问。
<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="4" separator="," id="myAtt" /> <%
Iterator i = (Iterator) pageContext.getAttribute("myAtt");
while(i.hasNext()) {
String s = (String) i.next();
%>
<%= s %> <br/>
<%
}
%>
例4:
生成iterator,使用converter属性,这里的convertor仅仅将每一个对象添加了一个"converter-"前缀。
<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" converter="%{myConverter}">
<s:iterator>
<s:property /><br/>
</s:iterator>
</s:generator>
public class GeneratorTagAction extends ActionSupport { ....
public Converter getMyConverter() {
return new Converter() {
public Object convert(String value) throws Exception { return "converter-"+value;
}
};
}
第二篇:【文法总结】系助词「は」的用法
[警告]以下是很科學的理解方式,建議在邏輯專家指導下閱覽。
很多人把「が」和「は」作比較,但說清楚一點,他們在比較的是被「は」吃掉的「が」和沒有被吃掉的「が」。「が」和「は」在本質上是不可比較的。
「が」跟「を」、「に」等一樣,是格助詞,放置圍繞動作的各種關係者。放置在主格「が」的是句子的主要動詞的精神核心。
「は」跟「も」、「こそ」等一樣,是係助詞,加於已存在的格助詞上作為主觀觀點的修飾。「は」有兩個用法:用法一是指定說話的精神核心,用法二是調整討論範圍。
判斷「は」的所在格
因為「は」是係助詞,見到「は」時必須先理解它吃掉的是「が」還是「を」還是空氣,三個情況分別在例3C中三個被吃後變成「は」的位置看到。
要判斷被吃掉的格是什麼,最可靠的方法是排除已經出現了的格,例如 熊は俺が食べた,由於「が」已出現,「は」所吃的就自然是「を」。
如果已經出現的格不足夠,就會有歧義,但理解上就可以靠語義去判斷。俺は食べた(が) 林檎は食べた(を) 熊は食べた(が、を皆可) 其他格助詞加上「は」後仍被保留,不會被吃掉,所以會有「には」、「へは」、「からは」、「よりは」等等。
用法一 在一句中只可使用一次(包括特殊用法:不用),不可以用在主格「が」之後,可以產生以下兩個作用之一:
作用X:A(問題)的答案是B(答案) / 值指派
如果沒有「は」存在,「が」項就是答案,如果「は」存在,「は」之後的一項就是答案。 如果沒有「は」存在,「が」之後就是問題,如果「は」存在,「は」之後的一項以外的所有部份是問題。
沒有「は」存在時,「が」項前面不可以有任何東西存在。
要測試「は」是否在發答問作用,最直接的方法就是把句子改成一個指定句:AはBだ,如果成功,測試結果=正。
作用Y:強調
如果沒有「は」存在,整句的邏輯就是要帶出的意思,如果「は」存在,「は」之前的一項就是被強調項。
要產生這個作用,一句只能有一個「は」,因此一般只能吃「が」或更前的項。
要測試「は」是否在產生作用Y,一個方法是試把「は」改成「だけは」,若改後意思仍然通順,測試結果=正。
用法二 在一句中可被多次運用,在非倒裝句中必定是出現在用法一之前。
要測試用法二的「は」,方法是試把「は」項換成別的物件,若原句有暗示換後句不正確的意思,測試結果=正。
如果用法二的「は」只有一個,要測試用法二的「は」還有一個方法,把它換成「なら」,若句子意思不變,測試結果=正。
用法二可以看成是和另一係助詞「も」的跨句並列成一對的。
本は読んだ 所明示的是 本を読んだ 它同時也暗示存在另一個A可使得 Aを読んだ 不成立
本も読んだ 所明示也同樣是 本を読んだ 它同時也暗示存在另一個A可使得 Aを読
んだ 成立
引伸現象
從句中不可能有「は」出現,因為從句的本質是純邏輯,不會用於值指派或強調,也不會界定討論範圍。
示例
〔例1A〕今 此処で 俺が 本を 読んだ = 剛才在這裏我讀書了。(因為「が」前面有副詞和で格,這必定是作用Y)
〔例1B〕俺が 今 此処で 本を 読んだ = 剛才在這裏讀書的就是我。(因為蓄意把「が」項提前,這必定是作用X)
〔例2A〕今 此処で 俺は 本を 読んだ = 剛才在這裏我讀的是書。(理解為作用X)/剛才在這裏 我 讀了書。(理解為作用Y)/(用法二省略)
〔例2B〕俺は 今 此処で 本を 読んだ = 我就是剛才在這裏讀了書。(理解為作用X)/我 剛才在這裏讀了書。(理解為作用Y)/(用法二省略)
〔例2C〕今は 此処で 俺が 本を 読んだ = 剛才發生的就是我在這裏讀了書。(理解為作用X)/(作用Y不適用)/(用法二省略)
〔例2D〕今 此処では 俺が 本を 読んだ = 剛才在這裏發生的就是我讀了書。(理解為作用X)/(作用Y不適用)/(用法二省略)
〔例2E〕〔誤〕今 此処で 俺が 本は 読んだ = (語法錯誤,「は」不可用在主格「が」之後)
〔例2F〕本は 今 此処で 俺が 読んだ = 書的話,剛才在這裏我讀過。(因為蓄意把被「は」吃掉的「を」項提前,只能是用法二)
〔例3A〕今 此処で 俺は 本は 読んだ = 剛才在這裏要說我的話,對書做了的事就是把它讀了。(第一個は只能是用法二,理解為作用X)/(作用Y不適用)/剛才在這裏要說我,書的話,是有讀過的。(理解為只有用法二)
〔例3B〕今 此処では 俺は 本は 読んだ = 剛才要說我,在這裏的話,對書做了的事就是把它讀了。(理解為作用X/作用Y不適用/省略只有用法二)
〔例3C〕今は 此処では 俺は 本は 読んだ = 要說剛才,我,在這裏的話,對書做了的事就是把它讀了。(理解為作用X/作用Y不適用/省略只有用法二)
〔例3D〕今 此処では 俺は 本を 読んだ = 剛才要說在這裏的話,我做了的事就是把書讀了。(理解為作用X/作用Y不適用/省略只有用法二)
〔例3E〕今は 此処では 俺は 本を 読んだ = 要說剛才,在這裏的話,我做了的事就是把書讀了。(理解為作用X/作用Y不適用/省略只有用法二)
〔例4〕今 此処で 俺は 本は 読みは した = 剛才在這裏要說我的話,書的話,讀了的事是真的。(首兩個は只能是用法二,理解為作用X)/(作用Y不適用)/剛才在這裏要說我,書,讀的話,是有的。(理解為只有用法二)
以上,是在下參考若干資料(例如維基),綜合個人經驗整理而成。有疑問或不同見解者,歡迎討論。往後會繼續有別的文法話題,希望最後可以成為一套完整筆記。