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>
在OurSecuredJSCookMenuItem
class中我有以下代码段:
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#sendRedirect
与 String url
一起使用,这将抛出一个 org.apache.tapestry.RedirectException
(打开 url)。这有效,它确实在我的浏览器中打开了 url。但是,它确实导航到打开的选项卡中的 url,我在其中单击了子菜单项。有没有办法在新标签页(跨浏览器)中打开外部 link?
我们尝试了各种方法并更改了很多次代码,但与我在问题中使用的代码相比,我们最终只做了很小的调整就可以正常工作了..
- 我已经对我的问题 class 做了一个子 class。
- 我在菜单 Java-class 中使用了
if (item instanceof subclass)
来使用外部 link 组件。
- 并且我在我们的菜单 html-文件中的其他类型
a-href
组件的正下方添加了这个外部 link 组件。
虽然不是很优雅,但非常简单。我们只是使用与页面完全相同的代码,但是对于外部 link 我们在 "copy-pasted" a-href
组件中使用 target="_blank"
。
我正在做一个 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>
在OurSecuredJSCookMenuItem
class中我有以下代码段:
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#sendRedirect
与 String url
一起使用,这将抛出一个 org.apache.tapestry.RedirectException
(打开 url)。这有效,它确实在我的浏览器中打开了 url。但是,它确实导航到打开的选项卡中的 url,我在其中单击了子菜单项。有没有办法在新标签页(跨浏览器)中打开外部 link?
我们尝试了各种方法并更改了很多次代码,但与我在问题中使用的代码相比,我们最终只做了很小的调整就可以正常工作了..
- 我已经对我的问题 class 做了一个子 class。
- 我在菜单 Java-class 中使用了
if (item instanceof subclass)
来使用外部 link 组件。 - 并且我在我们的菜单 html-文件中的其他类型
a-href
组件的正下方添加了这个外部 link 组件。
虽然不是很优雅,但非常简单。我们只是使用与页面完全相同的代码,但是对于外部 link 我们在 "copy-pasted" a-href
组件中使用 target="_blank"
。