兩個(gè)jsp頁(yè)面通過(guò)xwork傳數(shù)據(jù)的幾個(gè)方式:
這幾個(gè)方法是在做項(xiàng)目時(shí)用到的,記在這里,如果忘記了可以參考一下,大家如果感興趣,也可以參考一下,我想對(duì)初學(xué)webwork的應(yīng)該會(huì)有一些幫助,我做東西沒(méi)太多的經(jīng)驗(yàn),可能有很多地方說(shuō)的不對(duì),寫得時(shí)候也是按照自己的理解寫上去的,例子里的代碼,是我做東西時(shí)候的真實(shí)代碼,也是可行的,主要是說(shuō)明一下怎么做。
起初屬于無(wú)奈,因?yàn)椴荒芙?jīng)過(guò)后臺(tái)連接數(shù)據(jù)庫(kù)得到數(shù)據(jù),即使能得到,也是很麻煩,很耗費(fèi)時(shí)間,無(wú)奈通過(guò)xwork進(jìn)行傳值!現(xiàn)在發(fā)現(xiàn)挺好的一件事情,也許有弊端,但我的經(jīng)驗(yàn)不足,暫時(shí)并沒(méi)有發(fā)現(xiàn),如果有什么不對(duì)的地方,希望大家給點(diǎn)意見,批評(píng)一下,呵呵,我是大一的學(xué)生!
1.如果這個(gè)頁(yè)面的數(shù)據(jù)要給下一個(gè)頁(yè)面,且不經(jīng)過(guò)java文件處理,可以用這個(gè)方法!
那是一個(gè)request的周期問(wèn)題,因?yàn)樵趦蓚€(gè)jsp界面通過(guò)xwork進(jìn)行跳轉(zhuǎn),需要傳相同的數(shù)據(jù)或者下一個(gè)界面要用到上一個(gè)jsp頁(yè)面的數(shù)據(jù)時(shí)就可以像下面那樣傳值,要注意的是,兩個(gè)jsp頁(yè)面,在xwork跳轉(zhuǎn)的時(shí)候不能經(jīng)過(guò)java文件也就是不能讓另一個(gè)java文件進(jìn)行處理,如果在經(jīng)過(guò)一個(gè)java文件,那么request存儲(chǔ)的數(shù)據(jù)就會(huì)丟失!相反,request存儲(chǔ)的數(shù)據(jù)就會(huì)存在。
例如,
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>
不需要做任何的處理,但要記住,不能經(jīng)過(guò)后臺(tái)!(也許可以經(jīng)過(guò)后臺(tái),只要不進(jìn)行存儲(chǔ)數(shù)據(jù)就可以,但我沒(méi)試過(guò),因?yàn)槟菢泳蜎](méi)有意義了!)
另一個(gè)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>
在另一個(gè)界面,用${param.category}得到,param指的是<c:param>標(biāo)簽[jstl] ,在xwork中對(duì)result可以不用做任何處理,只要告訴它下一個(gè)界面是什么就可以了!
其中:${param.categoryId}和${param.testId}是得到上個(gè)界面的值得!
2. 如果在兩個(gè)頁(yè)面?zhèn)髦担虚g經(jīng)過(guò)了一個(gè)java文件,那么可以通過(guò)xwork進(jìn)行傳值,具體做法如果下
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}是第一個(gè)jsp“<c:paramname="model.test_id"value="${test.testId}"/>”
里的name,這樣值在下一個(gè)界面就可以得到了
下一個(gè)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.如果要經(jīng)過(guò)兩個(gè)action,經(jīng)過(guò)一個(gè)action后還要經(jīng)過(guò)另一個(gè)action才能到下一個(gè)jsp,后一個(gè)action需要jsp界面的數(shù)據(jù),那么可以用重定向redirect,這樣就可以達(dá)到你想要的結(jié)果!(也可以不用,但要通過(guò)數(shù)據(jù)庫(kù)在去查數(shù)據(jù),這樣很耗費(fèi)時(shí)間,也麻煩)
例如:
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的方法得到的!!!
其實(shí)這些也是經(jīng)過(guò)高人指點(diǎn)才做到的,發(fā)在這里有興趣的大家分享一下,也許我描述不對(duì),但我相信大家看例子也可以看懂得!如果有什么不對(duì)的地方,也請(qǐng)前輩們諒解并給予糾正!