Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ajax刷新验证码时出现问题_Java_Ajax_Jsf_Facelets_Primefaces - Fatal编程技术网

Java 使用ajax刷新验证码时出现问题

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

我在JSF页面中使用了captcha(不是recaptcha或随机生成的图像值等)。最初,它从
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.