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;
}
 }

数据被检索,但它们没有打印在信息 div 中。

在我的 .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>

然后上面的 Javascript 将用info上面的 HTML 替换标识的 div 的内容。所以最终的结果是

<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 元素的正下方。

给选择元素一个 ID,并用您的 AJAX 请求的响应替换选择元素的内容。

但另一个问题是您的操作不会生成 HTML 代码,而是生成包含 Struts 标记的 JSP 代码。这是没有意义的。Struts 标签在服务器端由 JSP 解释。但是您将它们直接发送到浏览器。浏览器只理解 HTML。它不知道 Struts 标签。

为什么不使用推荐的 MVC 方法?该操作应该生成一个 bean 列表,将其存储在请求中,然后转发到 JSP,该 JSP 将使用标签生成 HTML 标记。

最后,你应该

  • 使用准备好的语句而不是字符串连接
  • HTML 转义你的字符串。Struts 标签为你做这件事
  • 避免吞咽异常
  • 不以分号结束 SQL 查询。
于 2012-11-01T15:24:30.827 回答