在挂毯中隐藏javascript异常

Hiding javascript exceptions in tapestry

本文关键字:javascript 异常 隐藏      更新时间:2023-09-26

在Tapestry中,我会将用户从页面a重定向到页面B,有时在显示页面B之前,他会被重定向到页面C。这导致以下javascript异常显示为红色弹出窗口,如下图所示:

Exception invoking function Tapestry.Initializer.activate with parameters ["example"]: TypeError: $(...) is null

所有列为null的元素都来自B页,我不想也不想显示它。在这种情况下,我无法直接将用户从页面A重定向到页面C。

我需要一种挂毯中的方法来自己处理这些javascript异常,或者隐藏它们以避免出现,或者使用适当的挂毯技术在页面之间重定向而不会出现这些错误。目前,我正在通过从@AfterRender函数启动重定向代码来模拟用户在页面之间的移动。

编辑:我已经在下面添加了代码的相关部分

在用户点击修改后的第一页上,我将他重定向到用户页面

@InjectPage
UserDataPage userDataPage;
@OnEvent(value = EventConstants.ACTION, component = "modify")
Object onModify(Long userToEdit) {
    userDataPage.setUserId(userToEdit);
    userDataPage.setEditDetails(true);
    return userDataPage;
}

由于我真的需要编辑细节,UserDataPage这样做:

@InjectPage
UserDetailsPage userDetailsPage;
@AfterRender
Object setup() {
    if(editDetails) {
        userDetailsPage.setUserId(userToEdit);
        return userDetailsPage;
    }
}

当UserDetailsPage加载时,它显示有关UserDataPage中丢失的组件的错误(很明显,因为我不再使用UserDataPage)。在Firebug中,我看到脚本包含来自UserDataPage和UserDetailsPage的所有元素。例如,我在两个页面上都有grid元素,所以生成的挂毯脚本同时引用grid和自动重命名的grid_0。然后错误抱怨UserDataPage中缺少网格。

我不能直接从用户列表(第一页)转到UserDetailsPage,因为UserDetailsPpage要求重定向来自UserDataPage。我不能取消那个要求。

在页面之间重定向的正确方法是从事件处理程序返回页面类、页面名称或链接。

public Object onActionFromMyLink() {
  return MyPage.class;
}

要隐藏挂毯客户端错误,可以覆盖javascript函数Tapestry.error

Tapestry.error = function() {
  console.log(...);
}

但我认为问题出在你的代码中。

UPD

在挂毯中进行导航的最佳方法是使用页面激活上下文

在PageA重定向到PageB,然后PageB重定向到PageC的情况下,我认为PageB不可能呈现(或导致任何javascript异常)。PageB将简单地返回302重定向响应,浏览器将直接进入PageC。

我猜PageC缺少onPassive()方法(或等效的@PageActivationContext注释),并且您的激活上下文在请求之间丢失。

http://jumpstart.doublenegative.com.au/jumpstart/examples/navigation/onactivateandonpassivate/3http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/PageActivationContext.html