jQuery servlet 重定向后移动页面无法正确加载
jQuery mobile pages not loading correctly after servlet redirect
我的移动网络应用程序中有一些基于 jQuery Mobile 的页面需要在没有身份验证的情况下访问,有些页面只有在用户通过身份验证后才能访问。我的解决方案基于本教程:Java Servlet Filter Example Tutorial。
我已经完成 @WebFilter 检查用户尝试访问哪个页面以及他是否未通过身份验证(会话 未创建或者 session 中没有属性 user) 他被重定向到 login.html页。
这是来自我的 login.html 页面的相关代码:
<form action="LoginServlet" method="post">
...
input elements for username and password
...
</form>
表单将其数据提交给 LoginServlet。 LoginServlet 检查凭据是否正确,如果正确,则将其重定向回所需页面。目前我在会话中存储所需的页面 (it's better to store this in a hidden element inside the form, but I didn't know it when I was writing the code)
我使用这行代码从 LoginServlet 执行重定向:
response.sendRedirect(redirectToPage);
我项目中的所有页面都是简单的 *.html 页面 javascript, 我做了一个使用 jQuery Mobile 的移动网络应用程序。
重定向到所需页面后我的问题:
- 在地址栏中我看到了我的 servlet LoginServlet 的名称,而在 Chrome 的控制台中我没有看到我的页面内容,只有我的 servlet 的名称 LoginServlet 其内容为空白。但在浏览器中,我看到所有静态内容,它已正确呈现。
最重要的问题是加载页面中的所有动态内容都不起作用。动态内容我的意思是一些 ajax 函数应该在页面加载和呈现动态内容时调用:
$(document).on('pagebeforeshow',function(){
initPage();
});
如果我重新加载页面,一切都会开始正常工作。
我做错了什么?
提前谢谢你。
这个问题实际上有两种解决方案。
第一个是在 javascript 中执行重定向,而不是在 servlet 中,我认为这是更好的解决方案,更多细节请看这里:How to manage a redirect request after a jQuery Ajax call
如果您需要在提交 <form/>
后从 servlet 执行此操作,则第二种解决方案是将 data-ajax="false"
添加到 <form/>
标记中:
<form action="postthis" method="post" data-ajax="false">
,此解决方案取自此处:
我的移动网络应用程序中有一些基于 jQuery Mobile 的页面需要在没有身份验证的情况下访问,有些页面只有在用户通过身份验证后才能访问。我的解决方案基于本教程:Java Servlet Filter Example Tutorial。
我已经完成 @WebFilter 检查用户尝试访问哪个页面以及他是否未通过身份验证(会话 未创建或者 session 中没有属性 user) 他被重定向到 login.html页。
这是来自我的 login.html 页面的相关代码:
<form action="LoginServlet" method="post">
...
input elements for username and password
...
</form>
表单将其数据提交给 LoginServlet。 LoginServlet 检查凭据是否正确,如果正确,则将其重定向回所需页面。目前我在会话中存储所需的页面 (it's better to store this in a hidden element inside the form, but I didn't know it when I was writing the code)
我使用这行代码从 LoginServlet 执行重定向:
response.sendRedirect(redirectToPage);
我项目中的所有页面都是简单的 *.html 页面 javascript, 我做了一个使用 jQuery Mobile 的移动网络应用程序。
重定向到所需页面后我的问题:
- 在地址栏中我看到了我的 servlet LoginServlet 的名称,而在 Chrome 的控制台中我没有看到我的页面内容,只有我的 servlet 的名称 LoginServlet 其内容为空白。但在浏览器中,我看到所有静态内容,它已正确呈现。
最重要的问题是加载页面中的所有动态内容都不起作用。动态内容我的意思是一些 ajax 函数应该在页面加载和呈现动态内容时调用:
$(document).on('pagebeforeshow',function(){ initPage(); });
如果我重新加载页面,一切都会开始正常工作。
我做错了什么? 提前谢谢你。
这个问题实际上有两种解决方案。
第一个是在 javascript 中执行重定向,而不是在 servlet 中,我认为这是更好的解决方案,更多细节请看这里:How to manage a redirect request after a jQuery Ajax call
如果您需要在提交 <form/>
后从 servlet 执行此操作,则第二种解决方案是将 data-ajax="false"
添加到 <form/>
标记中:
<form action="postthis" method="post" data-ajax="false">
,此解决方案取自此处: