我正在创建一个页面,其中我调用了一个PrettyFaces页面加载操作方法:
<url-mapping id="informes-perfil">
<pattern value="/informes/#{informesPerfilMB.codigo}" />
<view-id value="/faces/informes_perfil.xhtml" />
<action onPostback="false">#{informesPerfilMB.load()}</action>
</url-mapping>由于某些原因,informesPerfilMB.load()操作被调用两次,第二次调用中的参数值为'null‘或'RES_NOT_FOUND’。
以下是我的加载方法:
public void load() {
if (isPostBack) {
isPostBack = false;
try {
System.out.println(codigo);
informe = informeEJBServiceLocal.getByCodigo(codigo);
this.buscarInformeIngreso();
this.buscarInformeOtroIngreso();
} catch (EJBServiceException e) {
e.printStackTrace();
}
}
}isPostBack变量被初始化为false,因此这将防止再次调用该方法,但出于某种原因,它确实调用了该方法。
此代码首先打印String: dcc509a6f75849b。然后,当加载被重复时,它会打印如下:RES_NOT_FOUND
我希望这段代码有助于解释正在发生的足以解决我的问题的事情,谢谢。
发布于 2016-07-21 15:30:01
首先,您的isPostBack变量被调用两次的原因很可能是因为您有两个bean实例,而不是一个单个实例。这种情况可能发生的原因有几个:
load()方法的应用程序的部分多次创建。我还认为您的方法可能会被调用两次,因为您编写EL表达式的方式(我不能百分之百确定):
<action onPostback="false">#{informesPerfilMB.load()}</action>
^^注意方法表达式末尾的括号。我相信这将迫使EL在计算表达式时对该方法进行评估。您的方法表达式应该如下所示:
<action onPostback="false">#{informesPerfilMB.load}</action>您还应该检查应用程序中可能调用此方法的其他位置。
如果这有帮助,请告诉我。
发布于 2016-09-15 17:20:47
我以前在类似的系统里也见过这种情况。我认为这是面孔和前脸之间的交互,缺少文件。RES_NOT_FOUND部分来自网络流量。有一些可能的faces资源(或样式表)是它试图在库中找到的,当它找不到的时候,它实际上会导致浏览器转到URL /informes/RES_NOT_FOUND。由于某些原因,如果我刷新页面而不发出RES_NOT_FOUND URL,它通常会找到该资源。
首先,我打开页面源代码,您将找到RES_NOT_FOUND,很可能还会找到样式表。考虑到xhtml文件的位置,您可能可以将其与xhtml文件中加载的资源关联起来,并查看缺少的资源。如果这没有帮助,那么尝试开发工具,看看哪些资源被加载了,哪些没有加载。然后确保资源是存在的,被部署的,并且在正确的位置。
如果它不是您可以控制的东西(如库资源),则始终可以确保您的setCodigo函数忽略"RES_NOT_FOUND“的值。
public void setCodigo(String value) {
if (!"RES_NOT_FOUND".equals(value)) {
this.codigo = value;
}
}您可能可以修改您的安全性或servlet映射设置(在WEB.XML中),以防止以RES_NOT_FOUND结尾的URL访问prettyfaces页面,但我对此还不太了解。
https://stackoverflow.com/questions/38487611
复制相似问题