??xml version="1.0" encoding="utf-8" standalone="yes"?> html:link有很多参数选项Q如关键有:(x) paramId--指定参数的key名称Q如要输?a name--为HashMap属性的对象Q用此属性,可以q行多参数输出。例Q?/p>
CODE: ----------------------------------------------------------------------------------------- 在struts标签<html:link>的page属性指定的URI后面传递参数可以有几种方式Q? 1.若明参数名和参数值则直接在URI后输出, 2.对于参数g定的,paramName和paramProperty来输出,用paramId属性指定参数名?br />
对于paramName指定的对象应该存在于page、request、session、application其中之一。一般来_(d)是从ActioncMq来的,作ؓ(f)request的属性之一Qrequst.setAttribute("name",object)Q?br />
如果paramName指定的对象是action的ActionFormQ则无需使用request.setAttributeҎ(gu)?br />
例:(x)<html:link page="/test.do" paramId="userid" paramName="uid">uname</html:link> 3.若两个参敎ͼ一个确定一个不定Q则是以上两U方法的l合Q即Q?br />
<html:link page="/test.do?action=modify" paramId="userid" paramName="uid">modify</html:link> 4.对于多个参数的问题,可以使用一个HashMap集合对象来存放所有的参数名及(qing)对应的参数值的方式QparamName属性值指定ؓ(f)该HashMap集合对象卛_?br />
举例Q?br />
<% 5.针对有的|友?lt;html:link>标签中嵌入用jsp脚本(scriptlet)的问题, 虽然在struts标签中嵌入jsp脚本不是真正意义上的struts应用Q但是有时在委曲求全的情况下也只能如此了Q除非用自定义标签。比如在form表单中可能需要根据具体数据让某个字段是只ȝQ就可以用嵌入jsp脚本来实玎ͼ(x) 6.另外一U比较变态的Ҏ(gu)Q既不是真正意义上的strutsQ也不符合xml规范。那是?lt;a>标签中用<bean:write>标签输出参数倹{?br />
如:(x)<a href="test.do?uid=<bean:write name="user" property="userid"/>&name=<bean:write name="user" property="username"/>">test</a>
3.http://blog.csdn.net/nokiaguy/archive/2009/01/15/3786503.aspx
4.http://blog.csdn.net/nokiaguy/archive/2009/01/16/3793473.aspx
5.http://blog.csdn.net/nokiaguy/archive/2009/01/16/3797879.aspx
6.http://blog.csdn.net/nokiaguy/archive/2009/01/19/3835476.aspx
7.http://blog.csdn.net/nokiaguy/archive/2009/01/19/3838344.aspx
8.http://www.aygfsteel.com/nokiaguy/archive/2009/nokiaguy/archive/2009/02/03/253022.html 9.http://www.aygfsteel.com/nokiaguy/archive/2009/nokiaguy/archive/2009/nokiaguy/archive/2009/02/07/253722.html 10.http://www.aygfsteel.com/nokiaguy/archive/2009/nokiaguy/archive/2009/nokiaguy/archive/2009/02/archive/2009/02/12/254421.html 11.http://www.aygfsteel.com/nokiaguy/archive/2009/02/14/254687.html 12.http://www.aygfsteel.com/nokiaguy/archive/2009/nokiaguy/archive/2009/02/14/254688.html 13.http://www.aygfsteel.com/nokiaguy/archive/2009/nokiaguy/archive/2009/02/archive/2009/02/16/254835.html 14.http://www.aygfsteel.com/nokiaguy/archive/2009/nokiaguy/archive/2009/02/archive/2009/02/archive/2009/02/16/254916.html 15.http://www.aygfsteel.com/nokiaguy/archive/2009/nokiaguy/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/18/255228.html 16.http://www.aygfsteel.com/nokiaguy/archive/2009/nokiaguy/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/19/255383.html 17.http://www.aygfsteel.com/nokiaguy/archive/2009/nokiaguy/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/19/255398.html 18.http://www.aygfsteel.com/nokiaguy/archive/2009/nokiaguy/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/20/255819.html 19.http://www.aygfsteel.com/nokiaguy/archive/2009/nokiaguy/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/nokiaguy/archive/2009/02/23/256345.html 20.http://www.aygfsteel.com/nokiaguy/archive/2009/nokiaguy/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/nokiaguy/archive/2009/02/archive/2009/02/24/256426.html 21.http://www.aygfsteel.com/nokiaguy/archive/2009/nokiaguy/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/nokiaguy/archive/2009/02/archive/2009/nokiaguy/archive/2009/02/24/256497.html 22.http://www.aygfsteel.com/nokiaguy/archive/2009/nokiaguy/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/nokiaguy/archive/2009/02/archive/2009/nokiaguy/archive/2009/nokiaguy/archive/2009/02/25/256711.html 23.http://www.aygfsteel.com/nokiaguy/archive/2009/nokiaguy/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/02/archive/2009/nokiaguy/archive/2009/02/archive/2009/nokiaguy/archive/2009/nokiaguy/archive/2009/02/archive/2009/02/27/257067.html 24.http://www.aygfsteel.com/nokiaguy/archive/2009/02/27/257076.html
]]>
action --指定点击链接后,q入?.do动作action的g需要跟后缀Qstruts自动补上.do
page -- 跟action一L(fng)功能Q不q这个不?x)自动?doQ也是说可以链接其他类型的动作Q如html,jsp,php{?/p>
paramName -- 能识别作用域(L)内的Object的名U?br />
paramProperty--paramName的输出属性,paramId,paramName ,paramProperty可以l成单一参数传递的linkQ如<html:link action="/PRC301E1" paramId="prc_no" paramName="element" paramProperty="fjPrcNo">Q当element.getfjPrcNo()的gؓ(f)prc1Ӟ则输Zؓ(f) http://xxoo.com/PRC301E1.do?prc_no=prc1
[Copy to clipboard]
<%
HashMap map=new HashMap();
map.put("check","22");
map.put("name","abc");
pageContext.setAttribute("map",map); //因ؓ(f)所有tag的取值只?x)搜索作用?page/request/session/application)Q而不?x)识别当前的实例Q所以只有存入?br />
%>
<html:link action="/PRC301E1" name="map">
多参数输?br />
</html:link>
如:(x)<html:link page="/test.do?action=add">add</html:link>
若参数值是一个bean对象的属性|比如ActionForm,或者集合中存放的对象)则:(x)
<html:link page="/test.do" paramId="userid" paramName="user" paramProperty="uid">uname</html:link>
//代码理想的位|应该是在action?br />
//可以在jsp面试
java.util.HashMap pms = new java.util.HashMap();
pms.put("code", "001002");
pms.put("name", "tester");
pms.put("alias", new String[]{"matin","jack"});
request.setAttribute("params", pms);
%>
<html:link action="/test.do" name="params" >test</html:link>
~译后的l果Q?lt;a href="/test.do?code=001002&name=tester&alias=matin&alias=jack">test</a>
q种方式虽然可以解决传多参数的问题,但是实现h也比较麻烦,特别是对记录集中的数据逐条列出的时?/p>
例如:
<html:link page="/test.do?code=<%=varible%>">add</html:link>Q这U写法是错误的,是无法编译的?br />
有的|友认ؓ(f)在struts标签内是不允怋用jsp脚本的,q种说法也不准确。如果前面的写法Ҏ(gu):
<html:link page="<%="/test.do?code="+varible%>">add</html:link>Q就可以被执行,但是要注意URL相对路径的问题?/p>
<%
boolean rdonly=false;
if(2==2) rdonly=true;
%>
<html:text property="userid" readonly="<%=rdonly%>" />
]]>
(1) 允许在URL 中以多种方式包含h参数?br />
(2) 当用h览器关闭Cookie Ӟ?x)自动重写URLQ把SessionID 作ؓ(f)h参数包含在URL 中,用于跟踪用户的Session 状态?/span>
<html:link> 标签有以下重要属性:(x)
(1) forwardQ指定全局转发链接?br />
(2) hrefQ指定完整的URL 键接?br />
(3) pageQ指定相对于当前|页的URL?/span>
<html:rewrite> 用于输出链接中的URI部分Q但它ƈ不生成HTML <a> 元素。URI指的是URL 中协议、主机和端口以后的内宏VURI 用于指定具体的请求资源。例如,对于URLQHTTPQ?/localhost:8080/HtmlBasic.doQ它的URI?HtmlBasic.do
CZQ?br />
1、创建全局转发链接
首先Q在Struts-config.xml ?lt;global-forwards> 元素中定义一?lt;forward> 元素Q?br />
<global-forwards>
<forward name = "index" path="/index.jsp"/>
</global-forwards>
接着Q在JSP 文g中创?lt;html:link> 标签Q?br />
<html:link forward="index">
Link to Global ActionForward
</html:link>
<html:link> 标签的forward 属性和<global-forwards> 元素中的<forward> 子元素匹配。以上代码生成如下HTML 内容Q?br />
<a href="/index.jsp">Link to Global ActionFoward</a>
值得注意的是Q?lt;html:link> 的forward 属性只引用Struts-config.xml 配置文g?lt;global-forwards>内的<forward> 子元素,如果引用<action> 内的<forward> 子元素,在运行时会(x)抛出异常Q?br />
Cannot create rewrite URL: Java.Net.MalfomedURlException: Cannot retrieve ActionForward
2、创建具有完整URL 的链?br />
如果Web 应用需要链接到其他站点Q应该给出其他站点完_(d)QԌQ例如:(x)
<html:link >
Generate an "href" directly
</html:link>
生成HTML 代码如下Q?br />
<a >Generate an "href" directly</a>
值得注意的是Q如果指定了<html:link> 标签的href 属性,即用户览器的Cookie 关闭Q?lt;html:link> 标签也不?x)把用户SessionID 作ؓ(f)h参数加和到URL 中?/span>
3、从当前|页中创建相对URL
如果从一个网链接到同一个应用中的另一|页Q可以采用以下方式:(x)
<html:link page="/HtmlBasic.do">
A relative link from this page
</html:link>
<html:link> 标签?page 属性用于指定相对于当前应用的URI。以上代码生成如下HTML 内容Q?br />
<a href="/lib/HtmlBasic.do">......</a>
4、在URL ?URI 中包含请求参?br />
如果要在URL或URI 中包含请求参敎ͼ只要把请求参数加在URL ?URI的末ְ可以了。例如:(x)
<html:link page="/HtmlBasic.do?prop1=abc&prop2=123">
Hard-code the url parameters
</html:link>
<!-- or -->
<html:rewrite page="/HtmlBasic.do?prop1=abc&prop2=123"/>
以上代码生成如下HTML 内容Q?br />
<a href=/lib/HtmlBasic.do?prop1=abc&prop2=123">......</a>
rewrite: /HtmlBasic.do?prop1=abc&prop2=123
提示Q在HTML ?amp;amp 代表Ҏ(gu)字符 "&"
5、在URL ?URI 中包含单个请求变?br />
如果要在URL 中包含一个请求参敎ͼ而这人参数的值存在于当前|页可访问的一个变量中Q可以按以下Ҏ(gu)来实现?br />
Z演示q一功能Q首先创Z个当前网可讉K的变量。例如,本例中创Z两个变量Q一个是字符cdQ一个是CustomerBean Q?它们存存于一?page 范围内:(x)
<%
/*
* Create a string object to store as a bean in
* the page content and embed in this link
*/
String stringBean = "Value to Pass ont URL";
pageContext.setAttribute("stringBean", stringBean);
%>
<jsp:useBean id = "customerBean" scope="page" class="htmltaglibs.beans.CurstomerBean"/>
<jsp:setProperty name="customerBean" property="name" value="weiqin"/>
接着Q把q两个变量作求参敎ͼ加入到URL或URI 中:(x)
<html:link page="/HtmlBasic.do"
paramId="urlParamName"
paramName="stringBean">
URL encode a parameter based on a string bean value
</html:link>
<html:link page="/HtmlBasic.do"
paramId="urlParamName"
paramName="customerBean"
paramProperty="name">
URL encode a parameter based on a customer bean value
</html:link>
rewrite: <html:rewrite page="/HtmlBasic.do"
paramId="urlParamName" paramName="stringBean"/>
rewrite: <html:rewrite page="/HtmlBasic.do"
paramId="urlParamName" paramName="customerBean"
paramProperty="name"/>
<html:link> 标签?paramId 属性指定请求参数名QparamName 属性指定变量的名字。如果变量ؓ(f)JavaBean Q用paramProperty 属性指定JavaBean 的属性?br />
对于本例的stringBeanQ请求参数gؓ(f)stringBean 的字W串倹{对于customerBeanQ指定了paramProperty 属性,h参数gؓ(f)customerBean ?name 属性倹{?br />
以上代码生成如下HTML 内容Q?br />
<a href="/HtmlBasic.do?urlParamName=Value to Pass on Url">
Url encode a paramter based on a string bean value
</a>
<a href="/HtmlBasic.do?urlParamName=weiqin">
url encode a parameter based on a customer bean value
</a>
rewrite: /HtmlBasic.do?urlParamName=Value to Pass on Url
rewrite: /HtmlBasic.do?urlParamName=weiqin
6、在URL ?URI 中包含多个请求变?br />
如果在URL ?URI 中包含多个请求参敎ͼ而这些参数的值来自多个变量,需要先定义一个Mapcd的java c,如java.util.HashMapQ用它来存放h变量。例如:(x)
<%
/*
* Strore values int a Map(HashMap in this case)
* and construct the URL based on the Map
* /
java.util.HashMap myMap = new java.util.HashMap();
myMap.put("myString", new String("myStringValue"));
myMap.put("myArray" , new String[]{"str1","str2","str3"} );
pageContext.setAttribute("map", myMap);
%>
在以上代码的HaspMap 中存放了两个对象Q其中第二个对象是个字符串数l。HashMap 被存攑֜PageContext 中?接下来就可以把这个HashMap 作ؓ(f)h参数Q加入到URL ?URI 中:(x)
<%-- For this version of the <html:link> tag: --%>
<%-- map = a map with name/value pairs to pass on the url --%>
<html:link page="/HtmlBasic.do" name="map">
URL encode a parameter based on value in a Map
</html:link>
<%-- Create the same rewrite string for the above link. --%>
rewrite:<html:rewrite page="/HtmlBasic.do" name="map"/>
<html:link> 标签的name 属性指定包含请求变量的HashMap 对象。HashMap 对象中的每一?key/value" 代表一Ҏ(gu)多对"h参数?h参数?。以上代码生成如下的Html 内容Q?br />
<a href="/HtmlBasic.do?myString=myStringValue&myArray=str1&myArray=str2&myArray=str3">
URL encode a parameter based on value in a Map
</a>
rewrite:/HtmlBasic.do?myString=myStringValue&myArray=str1&myArray=str2&myArray=str3
本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/dongfengpaopao666/archive/2008/01/05/2027055.aspx
<struts-config>
<data-sources>
<data-source key="DataSource" type="org.apache.commons.dbcp.BasicDataSource">
<set-property property="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<set-property property="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<set-property property="username" value="scott"/>
<set-property property="password" value="tiger"/>
</data-source>
</data-sources>
1Q当Java对象为nullӞ
2Q当String对象?"Ӟ
3Q当java.util.Collection对象中的isEmpty()q回trueӞ
4Q当java.util.Map对象中的isEmpty()q回true时?br />
eg.
<logic:empty name="userList">
...
</logic:empty>
该句{同于:(x)
if (userList.isEmpty())
2. logic:notEmpty
该标{应用正好和logic:empty标签相反Q略?br />
3. logic:equal
该标{ؓ(f){于比较W?br />
eg1. 比较用户的状态属性是?Q若?Q输?启用";
<logic:equal name="user" property="state" value="1">
启用
</logic:equal>
eg2. 如果上例中的value值是动态获得的Q例如需要通过bean:write输出Q因struts不支持标{ֵ套,可采用EL来解册问题?br />
<logic:equal name="charge" property="num" value="$">
......
</logic:equal>
4. logic:notEqual
该标{意义与logic:equal相反Q用方法类|略?br />
5. logic:forward
该标{于实现页面导向,查找配置文g的全局forward?br />
eg. <logic:forward name="index"/>
6. logic:greaterEqual
为大于等于比较符?br />
eg. 当某学生的成l大于等?0Ӟ输出“优秀”Q?br />
<logic:greaterEqual name="student" property="score" value="90">
优秀
</logic:greaterEqual>
7. logic:greaterThan
此ؓ(f)大于比较W,使用Ҏ(gu)同logic:greaterEqualQ略;
8. logic:lessEqual
此ؓ(f)于{于比较W,使用Ҏ(gu)同logic:greaterEqual,?
9. logic:lessThan
此ؓ(f)于比较W,使用Ҏ(gu)同logic:greaterEqual,?
10. logic:match
此标{比较对象是否相{;
eg1. (g)查在request范围内的name属性是否包?amigo"Ԍ(x)
<logic:match name="name" scope="request" value="amigo">
<bean:write name="name"/>中有一?#8220;amigo”丌Ӏ?br />
</logic:match>
eg2. (g)查在request范围内的name属性是否已“amigo”作ؓ(f)起始字符Ԍ(x)
<logic:match name="name" scope="request" value="amigo" location="start">
<bean:write name="name"/>?#8220;amigo”作ؓ(f)起始字符丌Ӏ?br />
</logic:match>
eg3.
<logic:match header="user-agent" value="Windows">
你运行的是Windowspȝ
</logic:match>
11. logic:notMatch
此标{于比较对象是否不相同Q与logic:match意义相反Q用方法类|略?br />
12. logic:messagePresent
该标{于判断ActionMessages/ActionErrors对象是否存在Q?br />
eg. 如果存在error信息Q将其全部输出:(x)
<logic:messagePresent property="error">
<html:messages property="error" id="errMsg" >
<bean:write name="errMsg"/>
</html:messages>
</logic:messagePresent >
13. logic:messagesNotPresent
该标{于判断ActionMessages/ActionErrors对象是否不存?使用Ҏ(gu)与logic:messagePresentcMQ略
14. logic:present
此标{于判断request对象传递参数是否存在?br />
eg1. user对象和它的name属性在request中都存在Ӟ输出相应字符Ԍ(x)
<logic:present name="user" property="name">
user对象和该对象的name属性都存在
</logic:present>
eg2. 若有一个名字ؓ(f)“user”的JavaBeanQ输出对应字W串Q?br />
<logic:present name="user" >
有一个名字ؓ(f)“user”的JavaBean?br />
</logic:present>
eg3.
<logic:present header="user-agent">
we got a user-agent header.
</logic:present>
15. logic:notPresent
此标{于判断request对象传递参数是否不存在Q意义与了logic:present相反Q用方法类|略?br />
16. logic:redirect
该标{于实现页面{向,可传递参数?br />
eg1. <logic:redirect href="http://www.chinaitlab.com"/>
17. logic:iterator
用于昄列表为collection的|List ,ArrayList,HashMap{)?br />
eg1. 逐一输出用户列表(userlList)中用L(fng)姓名Q?br />
<logic:iterate id="user" name="userList">
<bean:write name="user" property="name"/><br>
</logic:iterate>
eg2. 从用户列表中输出?开始的两个用户的姓?br />
<logic:iterate id="user" name="userList" indexId="index" offset="1" length="2">
<bean:write name="index"/>.<bean:write name="user" property="name"/><br>
</logic:iterate>
eg3. logic:iterator标签的嵌套D?br />
<logic:iterate id="user" indexId="index" name="userList">
<bean:write name="index"/>. <bean:write name="user" property="name"/><br>
<logic:iterate id="address" name="user" property="addressList" length="3" offset="1">
<bean:write name="address"/><br>
</logic:iterate>
</logic:iterate>
先来看一个简单例?/span>
1、资源文仉误信息来?其格式ؓ(f) key = value )
error.test = this is a test error.
2、JSP面中用于显C错误信息标{?br />
<html:errors property="testerror"/>
3、ActionFormBean的validate()Ҏ(gu)中生错误信?/span>
ActionErrors error = new ActionErrors();
error.add("testerror",new ActionMessage("error.test"))
return error;
q个例子的功能就是在ActionForm Bean的validate()Ҏ(gu)中生一条名为:(x)testerror的错误信息,错误信息息是资源文g中key?font color="#3366ff">error.test的倹{然后在面上用html:errors标签输出testerrorq条错误信息?/span>
q是最常用的一U功能,所有的错误信息都在资源文g里面?/span>
有h?x)问Q错误信息只能存攑֜资源文g中吗Q其实不是这栗?font color="#0000ff" size="3">不需要资源文件也可以产生错误信息?/span>
我们再来看一下ActionMessage的另一U构造方?
ActionMessage(String key,boolean isresource)
如果isresourcegؓ(f)true,则表Ckey是资源文件中的keyQ生的消息是与key相对应的消息
如果isresourcegؓ(f)false,则表CkeyZ条普通的消息?/font>
如果上面的error.add改ؓ(f)error.add("testerror",new ActonMessage("q是一条自定义消息",false",));那么面上显C的是Q这是一条自定义消息.
另外q可以用ActionMessage产生复合消息Q比如我们要输出Qxxx不能用作用户名,其中xxx是一个变量?/span>
首先我们在资源文件中加一个条复合消息
testmsg = {0}不能用作用户名。这?font color="#ff0000" size="4">{0}是要被替换的参数?/span>
我们再来看一下ActionMessage的另一中构造方?br /> ActionMessage(String key,Object value0);
也就是说?font color="#ff0000">value0的值来替换{0}
我们修改error.add为error.add("testerror",new ActonMessage("testmsg","孙中?))
那么JSP面上将昄Q毛泽东不能用作用户名?/span>
当然在一条复合消息中也可带多个参敎ͼ参数依次?/span>{0},{1},{2}或更?br />
例如Q?/span>loginUser = 用户?{0} 姓名:{1} dơ数:{2}.....
那么在生错误消息时qnew ActionMessage(String key,Object value0,Object value1,Object value2.....)或者用对象数lnew ActionMessage(String key,Object[] values)
String[] detail = {"Admin","王晶","12"};
error.add("testerror",new ActionMessage("loginUser",detail))