今天遇到一個問題,到現在也沒能比較圓滿的解決,是不是Struts在標籤庫上還不夠完善呢。比如有一個界面是顯示課件列表的,在最後一欄裏可以對數據進行操作,如下所示:
Code | Name | Author | OP |
---|---|---|---|
10000001 | 風洞模型課件 | 劉金東 | View Edit Delete |
10000002 | 卡門渦階課件 | 季銘義 | View Edit Delete |
10000003 | 複變函數課件 | 秦江 | View Edit Delete |
10000004 | 聽力課件 | 郭長凱 | View Edit Delete |
現在希望當用戶按刪除時先彈出個確認框,提示“是否確認刪除風洞模型課件”,用戶可以選擇確認或取消。其中“是否確認刪除”是在資源文件裏定義的(prompt.confirm.delete=是否確認刪除{0}),“風洞模型課件”是課件的名稱,課件bean名爲"ware"。如果寫成HTML,就是:
但因爲信息都是動態的,所以就有問題了。因爲在<html:link>的οnclick="..."裏,"<%"必須緊跟在第一個單引號後才能正確解析,即不能寫爲οnclick="return confirm('<%=str%>')"。所以,現在有兩種方法實現所需要的功能:
1、不用<html:link>,直接用HTML的<a>標記:
<a href="delete.do?code=<bean:write name="ware" property="code"/>"
onclick="return confirm('<bean:message key="prompt.confirm.delete" bundle="root" arg0="<%=toDel%>"/>');">
<bean:message key="course.list.op.delete"/>
</a>
2、使用<html:link>,事先定義一個只含一個參數的script函數,代碼如下:
<!--
function confirmDelete(str){
return confirm('<bean:message key="prompt.confirm.delete" bundle="root" arg0="'+str+'"/>');
}
-->
</script>
然後在刪除鏈接的地方這樣寫:
<html:link action="/delete" paramId="code" paramName="ware" paramProperty="code" onclick="<%="return confirmDelete('"+toDel+"');"%>">
<bean:message key="course.list.op.delete"/>
</html:link>
這兩種方法都能達到目的,我暫時使用了第2種用法,畢竟在struts程序的jsp裏直接使用<a>標記有點彆扭。我看了一下struts文檔,能把資源中的{0}轉換爲實際內容的標籤好象只有<bean:message>這一個,其實如果有辦法讓<bean:message>得到的內容放進某個bean裏就很好辦了,可惜……。
另外,沒研究過EL標籤庫,不知道會不會有幫助。