我需要将控制权检索回Jsp,并对我先前解雇的请求做出响应。 但我面临的问题是我无法在jsp中得到答案。
我经历了一些帖子并尝试了一些建议,但似乎没有一个对我有用。请指出我的错误在哪里。
以下是我的尝试:
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
log.info("IN form doGet");
request.setCharacterEncoding("utf-8");
String selectedClass = request.getParameter("key");
log.info(selectedClass);
String[] section = null;
DBHandler dbhandler = new DBHandler();
dbhandler.makeConnection();
if (true == dbhandler.verifyConnection()) {
section = dbhandler.getSection(selectedClass);
}
for (String str : section) {
log.info(str);
}
Logger log;
if (null != section) {
request.setAttribute(Appconstants.Section, section);
}
response.setHeader("Access-Control-Allow-Origin", "*");
response.sendRedirect("/ReportFetcher/WebContent/FirstJSP.jsp");
// RequestDispatcher view = request.getRequestDispatcher("/First.jsp");
// view.forward(request, response);
}
以下是jsp部分:
function funcOnChange() {
var index = document.detail.Class.selectedIndex;
var valueSelected = document.detail.Class.options[index].value;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function()
{
// Check to see if this state change was "request complete", and
// there was no server error (404 Not Found, 500 Server Error, etc)
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var substring=xmlHttp.responseText;
alert("Alert Dialog! Gaurav");
}
if (xmlhttp.readyState == 404){
alert("404 error");
}
if (xmlhttp.readyState == 500){
alert("500 error");
}
}
xhr.open('GET', 'http://localhost:8080/ReportFetcher/FormHandler?key='+encodeURIComponent(valueSelected), true);
xhr.send(null);
return false;
}
答案 0 :(得分:1)
我认为您正在做的一切正确并且如上所述,您还需要转发请求,而不是重定向请求。
您出错的地方是您正在创建XMLHttpRequest的对象并在发出请求时使用变量xhr
来引用它,但当您在此时处理响应时,您正在检查变量xmlhttp
,所以您需要做的是将变量xmlhttp
替换为xhr
。
如果您遇到任何问题,请随时提出。
答案 1 :(得分:1)
第一次下拉的更改会向db.thats发出ajax请求。 所以现在你需要在你的jsp中写下收到的响应,这样它实际上会填充第二个下拉列表。
要使servlet响应,您需要使用响应对象并使用print方法来编写响应。
这是一个如何在动态下拉列表中生成选项的线索
使用document.getElementById(yourselecttagid); 对于上面返回的标记,使用appendChild方法向其添加选项..
好的,现在servlet使用responseText返回响应,并使用scriplet在你的jsp中显示它... 喜欢这个
答案 2 :(得分:1)
使用RequestDispatcher包含或转发您的回复和请求。它很容易处理。
答案 3 :(得分:0)
我想你可能误解了response.sendDirect方法的含义。
那个方法设置适当的标题和内容正文,将客户端重定向到其他网址。
有关SRV.5.4的详细信息,请参阅。
因此,当您涉及该方法时,响应将得到解决,当客户端(浏览器)收到响应时,它会重定向到您设置的URL。而jsp将收到的是来自浏览器的新请求。