Java 使用ajax刷新验证码时出现问题
我在JSF页面中使用了captcha(不是recaptcha或随机生成的图像值等)。最初,它从Java 使用ajax刷新验证码时出现问题,java,ajax,jsf,facelets,primefaces,Java,Ajax,Jsf,Facelets,Primefaces,我在JSF页面中使用了captcha(不是recaptcha或随机生成的图像值等)。最初,它从CaptchaServlet获取其值。我想添加“刷新图像”按钮而不刷新整个页面,但下面的代码不起作用 <h:panelGrid id="grid" columns="1" style="margin-bottom:10px"> <h:graphicImage id="capimg" value="#{facesContext.externalContext.requestCon
CaptchaServlet
获取其值。我想添加“刷新图像”按钮而不刷新整个页面,但下面的代码不起作用
<h:panelGrid id="grid" columns="1" style="margin-bottom:10px">
<h:graphicImage id="capimg" value="#{facesContext.externalContext.requestContextPath}/../Captcha.jpg"/>
</h:panelGrid>
带有PrimeFaces的刷新按钮
刷新整个页面
你有什么建议吗?我可以使用托管bean并转发到servlet吗?该
使用Ajax异步更新页面的部分内容。但是,它需要包含所有必要的JavaScript库来完成所有Ajax工作。当主模板中有
而不是
时,应该会自动发生这种情况。JSF2.0资源管理将在其中包含必要的
元素。如果您已经阅读了服务器日志,您应该已经注意到由于缺少
而导致此操作失败的警告
以下是最小JSF 2.0 Facelet主模板的外观,其中PrimeFaces taglib声明为:
页面标题
把你的内容放在这里
请注意
和
而不是
和
。右键单击webbrowser中生成的HTML页面,然后选择查看源。您应该可以看到其中包含的
元素
Update:去掉
onclick
属性。这不是有效的JavaScript代码。此外,还需要确保webbrowser不会缓存带有图像的servlet响应。您可以通过在向响应写入任何位之前添加以下标题:
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.
嗨,巴卢斯,又是我。我的主页如你所说。包括p,我使用h:head h:body标签。当我使用另一个ajax工具(如验证)时,它会起作用。我的问题是刷新图像。在onclick操作中调用servlet是否有误?请删除
onclick
属性。这毫无意义。验证码servlet是否映射到/captcha.jpg
?您是否已通过设置相应的响应标题禁用浏览器缓存?是,captcharvlet/Captcha.jpg
。当我移除动作标签时,什么也不会发生。我现在将尝试禁用浏览器cahce。不,是onclick
属性,而不是action
属性。如果浏览器缓存已启用,则不会从服务器重新加载验证码,而只是从浏览器缓存重新显示。嗨,BalusC,我在模板xhtml页面中添加了
,但不起作用。整个页面再次刷新。然后我简化了它,我使用<代码>作为img src和一个按钮
还包括JS:document.getElementById('capimg').src='Captcha.jpg?'+myDate.getTime()代码>刷新所有页面agn:(
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.