一、問題描述
我們在使用<s:form>
標籤時,有時候會出現以下的錯誤:
org.apache.jasper.JasperException: /WEB-INF/page/system/userImport.jsp (line: 21, column: 4) According to TLD or attribute directive in tag file, attribute action does not accept any expressions
省略很多(出現錯誤一般都是自己代碼有問題,不用看別人的).....................
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
java.lang.Thread.run(Thread.java:619)
其實加粗體部分的字體已經說得很清楚了(屬性action不能接受任何表達式),這對於初學者來說,比如我,雖然明白那句話說的什麼意思,但是就是不知道自己錯在哪兒了。那麼今天小編我就以一個初學者的角度來爲大家解決這個問題(高手勿噴)。
二、問題的原因
相信各位初學者同我一樣,在使用Struts的s:form標籤時是像下面一樣使用的。
<s:form id="selectFileForm" action="${pageContext.request.contextPath }/system/userAction_importdata.do" theme="simple" method="post" enctype="multipart/form-data">
<table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td align="center" colspan="4">
<s:submit name="import" value="導入" cssStyle="width: 60px; font-size:12px; color:black; height=22" onclick="submitData()"></s:submit>
<input type="button" name="Reset1" id="save" value="關閉" onClick="window.close();window.opener.reflash();" style="width: 60px; font-size:12px; color:black; height:22">
</td>
</tr>
</table>
</s:form>
其實錯誤的原因很簡單,就是在的action裏,不能有jsp的表達式(下面粗體部分),但是呢,新的問題又出現了,就是服務器找不到我們要提交的路徑(某些版本的struts能夠找到類似“/system/userAction_importdata.do”,具體的我也不清楚,遇到這個問題時,可以嘗試一下我的辦法),我又想用Struts的標籤,這個時候就只能另覓它法了。
action=”${pageContext.request.contextPath }/system/userAction_importdata.do” theme=”simple”
三、解決方法
我就將我的做法告訴大家,或許大家有更好的辦法。
(1)首先在上增加一個ID;
<s:form id="selectFileForm" method="post" enctype="multipart/form-data">
(2)在提交按鈕上添加一個onclick事件,讓它執行js函數;
<s:submit name="import" value="提交" cssStyle="width: 60px; font-size:12px; color:black; height=22" onclick="submitData()"></s:submit>
(3)編寫js函數,當點擊按鈕時提交數據,有需要的可以驗證一下數據在提交。
<script language="javascript">
function submitData(){
document.selectFileForm.action = "${pageContext.request.contextPath }/system/userAction_importdata.do"
document.selectFileForm.submit();
}
</script>