java - 使用 PageParameters 时将信息消息传递到 Wicket 页面

标签 java wicket friendly-url

Wicket 是否允许在 PageParameters 对象中传递以下两种类型的参数?显然不是?

  • accountId 显示在 URL ( /account/<ID> )
  • infoMessage 显示在(可添加书签的)URL 中的参数

我目前正在对相关页面使用 IndexedHybridUrlCodingStrategy,并且只需尝试参数“0”和“infoMessage”就会出现此异常:

WicketMessage: Not all parameters were encoded. Make sure all parameter names are integers in consecutive order starting with zero. Current parameter names are: [0, infoMessage]

如果我将“infoMessage”参数名称更改为“1”,它可以工作,但会产生一个丑陋的 URL(在本例中类似于 /account/42/Tosite%20108207%20tallennettiin.5 ),这不是我想要的。


现在,显而易见的答案可能是 infoMessage 不应该出现在 PageParameters 中。但事实是,我尝试将其添加为普通构造函数参数,如下所示:

public AccountPage(PageParameters parameters, String infoMessage) {
    // ...
}

但是这种方法在一个重要的用例中失败了。删除与帐户相关的持久“记录”对象后,以下内容无法正确加载AccountPage(已删除的记录仍然可见)。此代码在 AjaxFallbackLink 的 onClick() 中执行。

setResponsePage(new AccountPage(AccountPage.pageParameters(account), message));

另一方面,我原来的方法......

setResponsePage(AccountPage.class, AccountPage.pageParameters(account));

...工作正常,因为它以某种方式“更彻底”地加载 AccountPage,但是,我再次不知道如何干净地传递 infoMessage 参数。

(上面的 AccountPage.pageParameters() 是一个简单的静态实用程序,用于创建适当的 PageParameters,其中“0”= 帐户 ID。AccountPage 构造函数始终使用 ID 从持久性加载帐户。)

有什么想法吗?也许使用 AjaxFallbackLink 会部分导致问题?

使用 Wicket 1.4。

最佳答案

从我在您的问题中看到的情况来看,您尝试呈现可添加书签的页面并向用户显示反馈消息(最有可能在 FeedbackPanel 中),但您不希望该消息作为 URL 的一部分。

您想要做的是告诉 session 您有一条信息性消息,并让反馈面板处理该消息。

@Override void onSubmit() {
    ... save object ...
    getSession().info("Object ... has been saved");
    setResponsePage(ObjectPage.class, new PageParameters("id="+object.getId()));
}

在本例中,您告诉 Wicket 在 session 中临时存储消息,直到反馈面板呈现该消息。这个习语也称为“flash messages”。

您不能同时使用 PageParameters 和另一个参数作为构造函数参数,因为当请求页面时,Wicket 无法使用此类构造函数创建页面实例。 Wicket 只知道如何使用默认构造函数实例化页面或使用 PageParameters 参数实例化页面。

关于java - 使用 PageParameters 时将信息消息传递到 Wicket 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10189570/

相关文章:

java - 如何在 Kotlin 中传递有界通配符类型参数?

apache - 引用: mod_rewrite, URL重写和 "pretty links"解释

PHP .htaccess -> 漂亮的 url(反向)

javascript - 如何使用 Apache Wicket 获取 div 标签的内部 html 内容

php - 指向友好 URL 的 HTML 表单

java - AndroidManifest.xml 正在欺骗我): (AndroidManifest. xml : The markup in the document preceding the root element must be well-formed.)

java - 如何修复 android.os.FileUriExposedException : file:///storage/emulated/0/Documents/SM. pdf 通过 Intent.getData() 暴露在应用程序之外

java - Java 和 C# 中的尾调用?

java - 想要使用 post 方法的剩余模板来使用服务

javascript - Java:未调用文本字段 onkeydown 上 if-else 条件下的 Javascript 方法