兩個jsp頁面通過xwork傳數據的幾個方式:
這幾個方法是在做項目時用到的,記在這里,如果忘記了可以參考一下,大家如果感興趣,也可以參考一下,我想對初學webwork的應該會有一些幫助,我做東西沒太多的經驗,可能有很多地方說的不對,寫得時候也是按照自己的理解寫上去的,例子里的代碼,是我做東西時候的真實代碼,也是可行的,主要是說明一下怎么做。
起初屬于無奈,因為不能經過后臺連接數據庫得到數據,即使能得到,也是很麻煩,很耗費時間,無奈通過xwork進行傳值!現在發現挺好的一件事情,也許有弊端,但我的經驗不足,暫時并沒有發現,如果有什么不對的地方,希望大家給點意見,批評一下,呵呵,我是大一的學生!
1.如果這個頁面的數據要給下一個頁面,且不經過java文件處理,可以用這個方法!
那是一個request的周期問題,因為在兩個jsp界面通過xwork進行跳轉,需要傳相同的數據或者下一個界面要用到上一個jsp頁面的數據時就可以像下面那樣傳值,要注意的是,兩個jsp頁面,在xwork跳轉的時候不能經過java文件也就是不能讓另一個java文件進行處理,如果在經過一個java文件,那么request存儲的數據就會丟失!相反,request存儲的數據就會存在。
例如,
jsp:
<c:url var="testContent" value="/admin/addcontent.action">
<c:param name="testId" value="${test.testId}"/>
<c:param name="categoryId" value="${test.categoryId}"/>
</c:url>
<a href="${testContent}">添加</a>
xwork中:
<action name="addcontent">
<result>/dream/admin/addcontent.jsp</result>
</action>
不需要做任何的處理,但要記住,不能經過后臺!(也許可以經過后臺,只要不進行存儲數據就可以,但我沒試過,因為那樣就沒有意義了!)
另一個jsp(addcontent.jsp):
<ww:a href="admin/getTestList.action?model.category_id=${param.categoryId}&id=${param.categoryId}" value="返回">
返回
</ww:a>
<form action="admin/addTestContent.action" method="post" enctype="multipart/form-data">
<input type="hidden" name="categoryId" value="${param.categoryId}">
<input type="hidden" name="content.testId" value="${param.testId}">
<table align="center">
<ww:textfield label="名稱" name="content.contentName" value="" required="true"/>
<tr>
<td>上傳文件</td>
<td colspan="2">
<input type="file" name="file1"><br/>
<input type="file" name="file2"><br/>
<input type="file" name="file3"><br/>
<input type="file" name="file4"><br/>
<input type="file" name="file5"> <br/>
</td></tr>
<ww:submit value="提交"></ww:submit>
</table>
</form>
在另一個界面,用${param.category}得到,param指的是<c:param>標簽[jstl] ,在xwork中對result可以不用做任何處理,只要告訴它下一個界面是什么就可以了!
其中:${param.categoryId}和${param.testId}是得到上個界面的值得!
2. 如果在兩個頁面傳值,中間經過了一個java文件,那么可以通過xwork進行傳值,具體做法如果下
jsp:
<c:url var="testContent" value="/admin/select_Test_category.action">
<c:param name="model.test_id" value="${test.testId}"/>
<c:param name="model.category_id" value="${test.categoryId}"/>
</c:url>
<a href="${testContent}">編輯</a>
xwork中:
<action name="select_Test_category" class="com.cool.lvjiachun.Select_Test_categoryAction">
<result name="success" type="dispatcher">
<param name="location">/cool/lvjiachun/test_category.jsp</param>
</result>
<result name="alone" type="dispatcher">
<param name="location">
/cool/lvjiachun/editor_test_category.jsp?model.category_id=${model.category_id}</param>
</result>
<interceptor-ref name="WSStack"/>
</action>
看一下result是怎么弄得吧,“?model.category_id=${model.category_id}”,${model.category_id}是第一個jsp“<c:paramname="model.test_id"value="${test.testId}"/>”
里的name,這樣值在下一個界面就可以得到了
下一個jsp,也就是editor_test_category.jsp,
<ww:a href="admin/getTestList.action?model.category_id=${model.category_id}&id=${model.category_id}" value="返回">
返回
</ww:a>
這樣就可以了!
3.如果要經過兩個action,經過一個action后還要經過另一個action才能到下一個jsp,后一個action需要jsp界面的數據,那么可以用重定向redirect,這樣就可以達到你想要的結果!(也可以不用,但要通過數據庫在去查數據,這樣很耗費時間,也麻煩)
例如:
jsp:
<ww:form action="/admin/addTestCategory.action" method="post" validate="true">
<ww:textfield label="添加分類" name="test.testName" required="true"/>
<ww:submit value="添加"></ww:submit>
<ww:url id="listlink" namespace="/admin" action="getTestList" method="getList"></ww:url>
<ww:hidden name="test.categoryId" value="${param.id}"></ww:hidden>
</ww:form>
xwork中:
<action name="addTestCategory" class="com.dream.action.TestCategoryAction" method="insert">
<external-ref name="testcategoryDAO">testcategoryDAOProxy</external-ref>
<result name="success" type="redirect">
<param name="location">/admin/getTestList.action?id=${test.categoryId}&model.category_id=${test.categoryId}</param>
</result>
<result name="input" type="redirect">
<param name="location">/admin/getTestList.action?model.category_id=${test.categoryId}&id=${test.categoryId}</param>
</result>
<interceptor-ref name="WSStack"/>
<interceptor-ref name="validationWorkflowStack"/>
</action>
“${param.id}”,看到了吧,它就是1的方法得到的!!!
其實這些也是經過高人指點才做到的,發在這里有興趣的大家分享一下,也許我描述不對,但我相信大家看例子也可以看懂得!如果有什么不對的地方,也請前輩們諒解并給予糾正!