使用標籤出現不能接受任何表達式(action does not accept any express)

一、問題描述
       我們在使用<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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章