繁体   English   中英

双重行动 - prettyfaces - jsf

[英]Double call to action - prettyfaces - jsf

我正在创建一个页面,我在其中调用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

我希望这段代码有助于解释发生的事情,足以解决我的问题,谢谢。

我已经看到过这种情况发生在我的类似系统上。 我认为这是面孔和漂亮面之间的相互作用,缺少文件。 RES_NOT_FOUND部分来自网络流量。 它有一些可能面临资源(或样式表),它试图在库中找到,当它不能时,它实质上导致浏览器转到URL /informes/RES_NOT_FOUND 出于某种原因,如果我刷新页面并且不会发出RES_NOT_FOUND URL,它通常会找到该资源。

首先,我打开页面源代码,你会发现RES_NOT_FOUND ,可能还有样式表。 鉴于它的位置,您可能能够将其与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页面,但我不太了解它。

首先,两次调用isPostBack变量的原因很可能是因为你有两个bean实例,而不是一个单例实例。 这可能发生的原因有几个:

  • 您的bean是请求作用域,并且正在向页面发出多个请求。
  • 您的bean被使用它的部分应用程序多次创建并调用load()方法。

我也相信你的方法有可能被调用两次因为你编写EL表达式的方式(我不是100%肯定):

 <action onPostback="false">#{informesPerfilMB.load()}</action>
                                                   ^^

请注意方法表达式末尾的括号。 我相信这将迫使EL在评估表达式时评估方法。 您的方法表达式应如下所示:

 <action onPostback="false">#{informesPerfilMB.load}</action>

您还应该检查应用程序中可能调用此方法的其他位置。

请让我知道这可不可以帮你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM