带参数的结果集实际上就是当result的type类型去不同的值的时候,比如:redirect或dispatcher,因为他们访问页面的机制是不同
的,redirect是客户端的跳转,也就是访问某一个页面时服务器会告诉我的客户端去访问另一个地址,然后客户端会再去访问那个地
址,所以在地址栏中也可以看到实际访问的地址位置,但是dispatcher是服务器端的跳转,跳转发生在服务器端客户端并不能看到跳
转的页面地址看到的还是自己访问的页面地址,因此在两种情况下参数的传递是不相同的。
struts.xml
<package name="user" namespace="/user" extends="struts-default">
<action name="user" class="com.zeko.action.user.action.ResultAction">
<result type="redirect">
/redirectPage.jsp?t=${type}
</result>
<result name="error">
/dispatcherPage.jsp?t=${type}
</result>
</action>
</package>
在dispatcher模式下,因为是服务器端的跳转,所以action并没有发生变化,访问的始终是同一个action,所以在action中存储的值在
跳转之后依然可以访问
<body>
mainPage. <br>
value stack: <s:property value="type"/>
Stack Context: <s:property value="#parameters.t"/>
<s:debug></s:debug>
</body>
上面的代码,实际运行过程中可以虽然经过跳转但是通过<s:property>依然可以取到type的值,但是不同通过<s:property value="t">取
到传递给dispatcherPage.jsp的值,因为t不是action中的值,所以并没有存储到value stack中,但是存储到了stack context中,所以可
以通过<s:property value="#parameters.t">取到t的值。
通过dispatcher访问后,value stack情况:
在redirect模式下,因为是客户端的跳转,所以action并发生了变化,通过resirect跳转之后直接访问的redirectPage.jsp?t=${type}并传
递了参数,因为没有通过action传递,所以在页面跳转之后是没有value stack中的值的,所以不能通过<s:property value="type">取得
type的值,但是可以通过#parameters取得t的值。
通过redirect访问后的value stack情况: