ava*_*ori 3 jsf redirect external
我正在使用jsf应用程序,该应用程序在某个时间需要在新选项卡中打开外部页面,使第一页保持活动状态.我需要找到一种方法来使应用程序执行,只需单击一下按钮:
我尝试过使用<outputLink />
但没有动作属性.我尝试过使用<commandLink />
但是它无法重定向到外面.我还尝试了在支持bean中编码的<commandLink />
with target="_blank"
和重定向:
<h:commandLink onclick="submit();" target="_blank" action="#{myBean.execute}" disabled="#{myBean.linkDisabled}" value="external link" />
Run Code Online (Sandbox Code Playgroud)
并且,在支持bean中:
public String execute() {
linkDisabled = true;
try{
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
externalContext.redirect(Constants.EXTERNAL_URL);
} catch(Exception e){
throw new FacesException("Redirection failed");
}
return THIS_PAGE;
}
Run Code Online (Sandbox Code Playgroud)
页面在新选项卡中打开,但它是当前页面而不是带有URL的页面,Constants.EXTERNAL_URL
并且仍然启用了该按钮.没有显示错误消息.有什么建议吗?
提前谢谢,安德烈
Bal*_*usC 12
你的问题很混乱.你正在混合"链接"和"按钮".您基本上需要通过JavaScript禁用客户端中的元素,因为响应不会返回到当前浏览器窗口/选项卡,而是返回到其他浏览器窗口/选项卡.在JavaScript中,很容易禁用按钮,但不能禁用链接.为简单起见,我假设您的意思是并且可以使用a <h:commandButton>
并且这是当前表单中的唯一按钮.
要解决您的问题,您需要删除onclick="submit()"
(因为它扰乱了默认行为)并且您需要删除导航结果(它应该没关系,但您在某些JSF impls中永远不会知道)并且您需要通过JS禁用按钮客户方.
所有代码都应该如下所示:
<h:form target="_blank">
<h:commandButton
value="external"
action="#{myBean.execute}"
onclick="setTimeout('document.getElementById(\'' + this.id + '\').disabled=true;', 50);" />
</h:form>
Run Code Online (Sandbox Code Playgroud)
和
public void execute() throws IOException {
FacesContext.getCurrentInstance().getExternalContext().redirect(Constants.EXTERNAL_URL);
}
Run Code Online (Sandbox Code Playgroud)
这setTimeout()
是必要的,因为在发送表单数据之前禁用了按钮,这将导致按钮自己的name = value对不会作为请求参数发送,因此JSF不会调用任何操作.
归档时间: |
|
查看次数: |
25919 次 |
最近记录: |