1

私のjqueryは次のとおりです。

$('select[name=select1]').change(function () {
            var cod=$(this).val();
            if (cod>0) {
                $.ajax({
                    url:"Load.do",
                    data: "cod="+cod,
                    success: function (response) {
                            $('#info').html(response); }
                    });
            }
        });

struts-config.xmlには、次のものがあります。

<action path="/Load" scope="request" type="mypackage.Load"></action>

クラスLoadはアクションです:

public class Load extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
{
    // TODO Auto-generated method stub

    Connection con = null;
    Statement stmt = null;
    ResultSet rs = null;

    try {
        // get the connection 
        stmt = (Statement) con.createStatement();

        String cod = request.getParameter("cod");

        String select = new String("Select firstCode, name from mytable where secondCode = '");
        select = select.concat(cod);
        select = select.concat("';");
        rs = stmt.executeQuery(select);
        PrintWriter out = response.getWriter();
        while (rs.next()) {
            out.print("<html:option value='");
            out.print(rs.getString("firstCode"));
            out.print("'>");
            out.print(rs.getString("name"));
            out.println("</html:option>");
            out.flush();
        }

        return null;
    } catch (NamingException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }  catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (rs != null) {
              try { rs.close(); } catch (SQLException e) {}
              rs = null;
        }
        if (stmt != null) {
              try { stmt.close(); } catch (SQLException e) {}
              stmt = null;
        }
        if (con != null) {
              try { con.close(); } catch (SQLException e) {}
              con = null;
        }        
    }

    return null;
}
 }

データは取得されますが、infodivには出力されません。

私の.jspページで、入力したい選択は次のとおりです。

 <html:select property="prop1">
 <html:option value="0">Choose:</html:option>
 <div id="info"></div> 
 </html:select>
4

1 に答える 1

1

JSPコードは実際には関係ありません。重要なのは、生成されたHTMLコードです。Firebugまたは同様のツールを使用してページのコンテンツを検査し、問題が何であるかを確認します。Strutsアクションが次のような適切なHTMLを返した場合:

<option value="2">some label</option>
<option value="3">some other label</option>

info次に、上記のJavascriptは、で識別されるdivのコンテンツを上記のHTMLに置き換えます。したがって、最終結果は次のようになります。

<select name="prop1">
    <option value="0">Choose:</option>
    <div id="info">
        <option value="2">some label</option>
        <option value="3">some other label</option>
    </div>
</select>

そして、上記は無効なHTMLです。オプションはdiv内ではなく、select要素のすぐ下にある必要があります。

select要素にIDを付け、select要素の内容をAJAXリクエストの応答に置き換えます。

ただし、もう1つの問題は、アクションがHTMLコードを生成せず、Strutsタグを含むJSPコードを生成することです。これは意味がありません。Strutsタグは、サーバー側でJSPによって解釈されます。しかし、あなたはそれらをブラウザに直接送っています。ブラウザはHTMLのみを理解します。Strutsタグについては知りません。

推奨されるMVCアプローチを使用しないのはなぜですか?アクションは、Beanのリストを生成し、それをリクエストに格納して、タグを使用してHTMLマークアップを生成するJSPに転送する必要があります。

最後に、あなたはすべきです

  • 文字列連結ではなく、プリペアドステートメントを使用する
  • HTML-文字列をエスケープします。Strutsタグはあなたのためにそれを行います
  • 例外を飲み込まないようにする
  • SQLクエリをセミコロンで終了しないでください。
于 2012-11-01T15:24:30.827 に答える