之参数传递

来源:互联网 发布:淘宝模特街拍 编辑:程序博客网 时间:2024/05/20 04:12

<html:link>之参数传递

html:link有很多参数选项,如关键有:
action --
指定点击链接后,入的*.doaction不需要跟后struts动补.do
page --
action的功能,不过这个不会自动补.do,也就是可以接其他型的作,如html,jsp,php

paramId--指定参数的key名称,如要http://abc.com/ss?kk=abc,paramId="kk"
paramName --
识别作用域(任意)内的Object的名称。
paramProperty--paramName
出属性,paramId,paramName ,paramProperty可以一参数传递link,如<html:link action="/PRC301E1" paramId="prc_no" paramName="element" paramProperty="fjPrcNo">,当element.getfjPrcNo()值为prc1则输 http://xxoo.com/PRC301E1.do?prc_no=prc1

name--HashMap属性的象,用此属性,可以行多参数出。例:

CODE:
[Copy to clipboard]
     <%
        HashMap map=new HashMap();
       map.put("check","22");
       map.put("name","abc");
       pageContext.setAttribute("map",map); //
所有tag的取只会搜索作用域(page/request/session/application),而不会识别当前的例,所以只有存入。
      %>
      <html:link action="/PRC301E1" name="map">
       
多参数
      </html:link>

-----------------------------------------------------------------------------------------

struts标签<html:link>page属性指定的URI后面传递参数可以有几方式:

1.若明确参数名和参数值则直接在URI出,
如:<html:link page="/test.do?action=add">add</html:link>

2.于参数不确定的,paramNameparamProperty出,用paramId属性指定参数名。
paramName指定的应该存在于pagerequestsessionapplication其中之一。一般来,是从Action类传过来的,作request的属性之一(requst.setAttribute("name",object))。
如果paramName指定的象是actionActionForm无需使用request.setAttribute方法。
例:<html:link page="/test.do" paramId="userid" paramName="uid">uname</html:link>
若参数是一个bean象的属性(比如ActionForm,或者集合中存放的象)
<html:link page="/test.do" paramId="userid" paramName="user" paramProperty="uid">uname</html:link>

3.若两个参数,一个确定一个不确定,是以上两方法的合,即:
<html:link page="/test.do?action=modify" paramId="userid" paramName="uid">modify</html:link>

4.于多个参数的问题,可以使用一个HashMap集合象来存放所有的参数名及对应的参数的方式,paramName属性指定为该HashMap集合象即可。
例:
<%
//
理想的位置应该是在action
//
可以在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>
编译后的果:<a href="/test.do?code=001002&name=tester&alias=matin&alias=jack">test</a>
这种方式然可以解决多参数的问题,但是实现起来也比,特对记录集中的数据逐条列出的

5.针对有的网友在<html:link>标签中嵌入使用jsp脚本(scriptlet)问题
例如:
<html:link page="/test.do?code=<%=varible%>">add</html:link>
这种写法是错误的,是无法编译的。
有的网友认为struts标签内是不允使用jsp脚本的,这种说法也不准确。如果前面的写法改成:
<html:link page="<%="/test.do?code="+varible%>">add</html:link>
,就可以被行,但是要注意URL路径的问题

然在struts标签中嵌入jsp脚本不是真正意上的struts用,但是有在委曲求全的情况下也只能如此了,除非使用自定义标签。比如在form中可能需要根据具体数据某个字段是只的,就可以用嵌入jsp脚本来实现
<%
boolean rdonly=false;
if(2==2) rdonly=true;
%>
<html:text property="userid" readonly="<%=rdonly%>" />

6.另外一较变态的方法,既不是真正意上的struts,也不符合xml范。那就是在<a>标签中用<bean:write>标签输出参数
如:<a href="test.do?uid=<bean:write name="user" property="userid"/>&name=<bean:write name="user" property="username"/>">test</a>