【问题标题】:Hiding javascript exceptions in tapestry在挂毯中隐藏javascript异常
【发布时间】:2013-08-12 15:25:24
【问题描述】:

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

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

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

我需要在 Tapestry 中自己处理这些 javascript 异常或隐藏它们的方法,或者需要适当的 Tapestry 技术在页面之间重定向而不会出现这些错误。目前我正在通过@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_0。然后错误抱怨 UserDataPage 缺少网格。

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

【问题讨论】:

  • 始终发布您遇到问题的代码的相关部分。仅口头描述就使事情变得模糊并易于解释。
  • 好了,我希望它能解决问题。
  • 为什么不从第一页返回UserDetailsPage 实例?为什么要返回UserDataPage,然后在UserDataPage.setup() 中重定向到UserDetailsPage?重定向两次对我来说没有意义。
  • 我不能直接从用户列表(第一页)转到 UserDetailsPage,因为 UserDetailsPage 要求重定向来自 UserDataPage。我不能摆脱这个要求。这不是我的决定,我已经尝试过影响我的上级,但这是不行的。

标签: javascript exception tapestry


【解决方案1】:

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

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

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

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

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

UPD

在 Tapestry 中进行导航的最佳方式是使用 page activation context

【讨论】:

  • 覆盖 Tapestry.error 完成了这项工作。谢谢你。如果您对我正在做的事情感兴趣,我还在我的问题中添加了代码详细信息。
  • 听起来你是在把头埋在沙子里,而不是真正修复错误。
  • UPD 是什么意思?!
【解决方案2】:

在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多