Tapestry 4.1 RedirectException 在不同的选项卡中打开外部 link

Tapestry 4.1 RedirectException to open external link in different tab

我正在做一个 Tapestry 项目。我现在只需要使用它,尽管 Tapestry 自 2008 年左右以来就缺乏支持。此外,我们使用 Tapestry v4.1.1(因此甚至不是最新版本 5)。

无论如何,我目前正在尝试从子菜单项打开外部 URL。我们有一个这样的 XML 文件:

<beans>
  ... // Other menu-item and sub menu-items

  <bean id="thisSubmenuId" class="OurSecuredJSCookMenuItem">
    <constructor-arg type="java.lang.Object" value="Sub Menu-item Name"/>
    <constructor-arg type="java.util.Set">
      <set>
        <value type="java.lang.String">ROLE_APPLICATIONADMINISTRATOR</value>
      </set>
    </constructor-arg>
    <property name="externalLink" value="${urlAdres}" />
    <property name="id" value="65000" />
  </bean>
</beans>

OurSecuredJSCookMenuItemclass中我有以下代码段:

public class OurSecuredJSCookMenuItem extends BasicJSCookMenuItem {

    private String externalLink;        

    public void onNavigate(final IRequestCycle cycle) {
        final String externalLink = getExternalLink();
        if (externalLink != null) {
            try {
                cycle.sendRedirect(externalLink);
                return;
            } catch (final Exception ex) {
                // Tapestry is strange.. In order to redirect to an external link you have to throw a RedirectException
                // example usage: 
                if (ex instanceof RedirectException) {
                    throw ex;
                }
            }
        }

        ... // more code irrelevant for this question
    }

    public String getExternalLink() {
        return this.externalLink;
    }

    public void setExternalLink(final String externalLink) {
        this.externalLink = externalLink;
    }
}

如您所见,IRequestCycle#sendRedirectString url 一起使用,这将抛出一个 org.apache.tapestry.RedirectException(打开 url)。这有效,它确实在我的浏览器中打开了 url。但是,它确实导航到打开的选项卡中的 url,我在其中单击了子菜单项。有没有办法在新标签页(跨浏览器)中打开外部 link?

Here are the docs for Tapestry 4.0 where you can find the IRequestCycle, sendRedirect-method and RedirectException (and more) if needed.

我们尝试了各种方法并更改了很多次代码,但与我在问题中使用的代码相比,我们最终只做了很小的调整就可以正常工作了..

  1. 我已经对我的问题 class 做了一个子 class。
  2. 我在菜单 Java-class 中使用了 if (item instanceof subclass) 来使用外部 link 组件。
  3. 并且我在我们的菜单 html-文件中的其他类型 a-href 组件的正下方添加了这个外部 link 组件。

虽然不是很优雅,但非常简单。我们只是使用与页面完全相同的代码,但是对于外部 link 我们在 "copy-pasted" a-href 组件中使用 target="_blank"