Jsf 如果托管bean中的条件为true,则打开新窗口
我想实现一种情况,用户输入一个URL,如果在我的托管bean中指定的条件为true,那么这个URL将在一个新网页中打开 我发现了这种可能性: “h:link”标记对于生成需要与Jsf 如果托管bean中的条件为true,则打开新窗口,jsf,primefaces,managed-bean,new-window,Jsf,Primefaces,Managed Bean,New Window,我想实现一种情况,用户输入一个URL,如果在我的托管bean中指定的条件为true,那么这个URL将在一个新网页中打开 我发现了这种可能性: “h:link”标记对于生成需要与JSF“结果”交互的链接非常有用,但是缺少“action”支持使得很难生成动态结果 “h:commandLink”标签很烂,生成的JavaScript真是吓人!除非您有充分的理由支持,否则不建议使用此标记。但它支持“action”属性,这正是“h:link”所缺少的 “h:outputLink”用于生成不需要与JSF程序本
JSF
“结果”交互的链接非常有用,但是缺少“action”支持使得很难生成动态结果
“h:commandLink”标签很烂,生成的JavaScript
真是吓人!除非您有充分的理由支持,否则不建议使用此标记。但它支持“action”属性,这正是“h:link”所缺少的
“h:outputLink”用于生成不需要与JSF
程序本身交互的链接。
最后,如果在“h:link”中添加“action”属性将是完美的
但在条件得到验证后,我没有找到从托管bean启动开放网页的方法
我正在使用JSF2.0、Facelets和PrimeFaces 3.4。要在新窗口中使用这些链接组件之一打开目标,需要指定
target=“\u blank”
属性,但这将在您单击链接时在新窗口中打开目标,因此不依赖于响应。您基本上需要在响应到达时在新窗口中打开目标。唯一的方法是向响应返回JavaScript调用,以便在webbrowser中执行
在标准JSF中,您可以有条件地呈现JavaScript的window.open()
<h:form>
<h:inputText value="#{bean.url}" />
<h:commandButton value="submit" action="#{bean.submit}">
<f:ajax execute="@form" render="@form" />
</h:commandButton>
<h:outputScript rendered="#{bean.valid}">window.open('#{bean.url}')</h:outputScript>
</h:form>
在PrimeFaces中,您可以使用指定在响应完成时需要执行的JavaScript代码
<h:form>
<p:inputText value="#{bean.url}" />
<p:commandButton value="submit" action="#{bean.submit}" />
</h:form>
与具体问题无关:你在那里引用的那些狂妄的语句似乎是由一个对HTTP/HTML基础知识一无所知的人写的(GET vs POST的局限性等等)。请带上一粒盐。打开URL,但像那样''我只想要这个,那么URL显然无效。它必须以http://等开头。将其传递给
new URL()
构造函数并捕获异常。如果捕获,则URL无效。我不希望此内容出现在“localhost:8081/JavaServerFaces/faces”URL之前,因为它是一个外部URL。谢谢您难道不理解我之前的评论吗?URL必须以http://
开头。否则,它显然与当前URL相关。您可以可以使用新URL(URL)对其进行验证
,然后检查它是否没有引发异常。如有必要,您可以在最终用户未输入时手动将http://
添加到URL的前缀。我相信OP表示他不希望URL中的“localhost…”部分…@AmiraGL:您可能应该为此提出另一个问题,详细说明如何获取此URL。
<h:form>
<p:inputText value="#{bean.url}" />
<p:commandButton value="submit" action="#{bean.submit}" />
</h:form>
private String url;
public void submit() {
if (validate(url)) {
RequestContext.getCurrentInstance().execute("window.open('" + url + "')");
}
}
// ...