gpt4 book ai didi

jsf - 如果托管 bean 中的条件为真,则打开一个新窗口

转载 作者:行者123 更新时间:2023-12-03 22:23:16 24 4
gpt4 key购买 nike

我想实现用户输入 URL 的情况,如果在我的托管 bean 中指定的条件为真,则该 URL 将在新网页中打开。

我发现了这种可能性:

The “h:link” tag is useful to generate a link which requires to interact with the JSF “outcome” , but lack of “action” support make it hard to generate a dynamic outcome.

The “h:commandLink” tag is suck, the generated JavaScript is really scary! Not recommend to use this tag, unless you have a solid reason to support. But it supports the “action” attribute, which is what “h:link” lack of.

The “h:outputLink” is useful to generate a link which does not require to interact with the JSF program itself. At last, it will be perfect if the “action” attribute is added into the “h:link“.

但在验证条件后,我没有找到从我的托管 bean 启动打开的网页的方法。

我正在使用 JSF2.0、Facelets 和 PrimeFaces 3.4。

最佳答案

要使用这些链接组件之一在新窗口中打开目标,您需要指定 target="_blank" 属性,但这会在此时在新窗口中打开目标您单击链接,因此不依赖于响应。您基本上需要在响应到达时在新窗口中打开目标。唯一的方法是返回 JavaScript window.open()调用响应以便它在网络浏览器中执行。

在标准 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>

private String url;
private boolean valid;

public void submit() {
valid = validate(url);
}

// ...

在 PrimeFaces 中,您可以使用 RequestContext#execute()指定需要在响应完成时执行的 JavaScript 代码。

<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 + "')");
}
}

// ...

与具体问题无关:您在此处引用的粗暴语句似乎是由对 HTTP/HTML 基础知识一无所知的人编写的(GET 与 POST 的局限性等)。请对它们持保留态度。

关于jsf - 如果托管 bean 中的条件为真,则打开一个新窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12688338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com