2017-04-12 11 views
0

現在、テーブルを持つJSPページがあります。右側に私はテーブルの値をバックエンドに動的に渡し、変数をセッションに格納し、この新しいJSPをモーダルボックス(div)内にロードして情報を編集するためのデータ編集ボタンがあります。次に、このモーダルボックスの内部からフォームを送信して、バックエンドSQLデータを更新します。私のJSPページ内で、AJAXを介して別のJSPをページ内のdivに挿入します。

個別のdivをたくさん作成せず、動的に作成したdivを1つだけ使用したいと思っていました。

JSPを使用していて変数クライアント側を渡さない理由は、エントリが特定のユースケースであり、それらがすべてバックフォームからフォームおよびデータをロードする際に事前に設定する必要のあるさまざまなフォームを持つためです。まず

は、私はそれは次に、ここでのAjaxアクション

<action name="editendorsement" class="fcawis.trucking.ajax.EditEndorsement"> 
    <result name="success" type="stream"> 
     <param name="contentType">text/plain</param> 
     <param name="inputName">inputStream</param> 
    </result> 
    </action> 
にだ

function editEndorsement(transactiontype, endoid){ 
    $.ajax ({ 
     url: '/fcawis/ajax/editendorsement?endoid='+ endoid , 
     action: 'editendorsement', 
     type: 'POST', 
     dataType: 'text', 
     success: function (data) { 
     $('#modalbox').load('Path/To/TheData.jsp');; 
     }, 
     error: function(data) { 
      alert('Error: ' + data[0]); // I Receive error everytime 
     } 
    }); 
    console.log("Transtype: " + transactiontype + " " + endoid); 
    var modal = document.getElementById('modalbox'); 
    var span = document.getElementsByClassName("close")[0]; 
    var div = document.getElementById(transactiontype); 
    div.style.display="block"; 
    modal.style.display = "block"; 
    span.onclick = function() { 
     modal.style.display = "none"; 
     div.style.display="none"; 
    } 
    window.onclick = function(event) { 
     if (event.target == modal) { 
      modal.style.display = "none"; 
      div.style.display="none"; 
     } 
    } 

} 

javascript関数に提出します

<form id="editendo" name="editendo" action="editendorsement" method="post"> 
<input type="hidden" id="endoid" name="endoid" value="<%=endo.getId2()%>" /> 
<td class="center"><a href="javascript:editEndorsement('<%=endo.getTransactionType()%>', '<%=endo.getId()%>')"><img src="/img/i/edit.png" class="actionicon" </a></td> 
</form> 

そして、AJAXを経由してフォームを送信するStrutsアクションを作成します

これはバックエンドコードに行きます

public String execute() throws Exception 
{ 
    request = getServletRequest(); 
    session = getSession(); 
    HttpSession httpSession = request.getSession(); 
    String endoId = (String) request.getParameter("endoid"); 
    httpSession.setAttribute("editid", endoId); 
    String str = "Successfully Through Action"; 
    stream = new ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8)); 
    return SUCCESS; 
} 

public InputStream getStream() { 
    return stream; 
} 

その後、私はそれを数回実行し、デバッガ、それは正常にセッション変数などを設定しますが、JSPページをロードすることができません。私は500の内部サーバーエラーを取得します。これはサーバー側の問題です。うまくいけば、私は十分な情報を与え、質問に答えて詳細を提供し、ちょっとした洞察を探しています。

+2

通常、500エラーは、問題の診断に役立つサーバー側でスタックトレースがあることを意味します。サーバーログには何かがありますか? –

+0

@RomanPuchkovskiy返信いただきありがとうございます、私はバックエンドからスタックトレースを取得しません、それは正常にデバッガを介してトレースして行くが、これはGoogle Chromeのコンソールから来ています。 AJAXスタックトレースを印刷できますか? "POST http:// localhost/fcawis/ajax/editendorsement?endoid = 20618 500(内部サーバーエラー)" – ThePirateBae

+0

@RomanPuchkovskiy 0:0:0:0:0:0:1 - - [12/2017:12:14:31 -0700 "POST/fcawis/ajax/editendorsement?endoid = 20620 HTTP/1.1" 500 6516これは私のApacheログファイルの唯一のものです。 :( – ThePirateBae

答えて

0

Struts2を使用している場合は、決してJSPを直接呼び出すべきではありません。コード内にURLを使用しました

success: function (data) { 
    $('#modalbox').load('Path/To/TheData.jsp');; 
}, 

上記のコードにバグがあります。まず、JSPページに直接アクセスします。これは実行できず、500エラーがスローされます。 2番目はjQueryエラーです。dataはAjaxコールから返され、.html()経由でDOMに直接挿入する必要があります。 streamの結果がHTMLではないという別のエラーが発生しました。次のエラー:モーダルを開くにはthisのようなものを使用してください。

関連する問題