在tapestry中隐藏javascript异常

时间:2013-08-12 15:25:24

标签: javascript exception tapestry

在Tapestry中我有一种情况,我将用户从页面A重定向到页面B,有时在显示页面B之前,他被重定向到页面C.这导致以下javascript异常显示为红色弹出窗口,如页面上出现的那样:

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

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

我需要在tapestry中使用一种方法来自己处理这些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中的所有元素。例如,我在两个页面上都有网格元素,因此生成的tapestry脚本既指向网格又自动重命名为grid_0。然后错误抱怨UserDataPage中缺少网格。

我不能直接从用户列表(第一页)到UserDetailsPage,因为UserDetailsPage要求重定向来自UserDataPage。我不被允许摆脱这个要求。

2 个答案:

答案 0 :(得分:0)

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

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

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

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

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

<强> UPD

在挂毯中进行导航的最佳方法是使用page activation context

答案 1 :(得分:0)

如果PageA重定向到PageB然后PageB重定向到PageC,我认为PageB渲染(或引起任何javascript异常)的可能性不大。 PageB只会返回302 redirect响应,浏览器将直接返回PageC。

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

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