首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双呼行动-前卫. jsf

双呼行动-前卫. jsf
EN

Stack Overflow用户
提问于 2016-07-20 17:57:53
回答 2查看 664关注 0票数 1

我正在创建一个页面,其中我调用了一个PrettyFaces页面加载操作方法:

代码语言:javascript
复制
<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’。

以下是我的加载方法:

代码语言:javascript
复制
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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-21 15:30:01

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

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

我还认为您的方法可能会被调用两次,因为您编写EL表达式的方式(我不能百分之百确定):

代码语言:javascript
复制
 <action onPostback="false">#{informesPerfilMB.load()}</action>
                                                   ^^

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

代码语言:javascript
复制
 <action onPostback="false">#{informesPerfilMB.load}</action>

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

如果这有帮助,请告诉我。

票数 1
EN

Stack Overflow用户

发布于 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“的值。

代码语言:javascript
复制
public void setCodigo(String value) {
  if (!"RES_NOT_FOUND".equals(value)) {
    this.codigo = value;
  } 
}

您可能可以修改您的安全性或servlet映射设置(在WEB.XML中),以防止以RES_NOT_FOUND结尾的URL访问prettyfaces页面,但我对此还不太了解。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38487611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档