0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

メモ8

Posted at

还有一种方法,可以使用 JavaScript 的 submit 方法与 target 属性结合,来实现不通过 AJAX 在新窗口打开 URL。

JSF 页面

<h:form id="mainForm" target="_blank">
    <h:commandButton id="forwardButton" value="Forward" action="#{bean.forwardToPage}" 
                     onclick="submitFormInNewWindow(); return false;"/>

    <h:outputText id="newUrlOutput" value="#{bean.newUrl}" style="display:none;" />

    <h:outputScript>
        function submitFormInNewWindow() {
            var form = document.getElementById('mainForm');
            form.target = '_blank';
            form.submit();
            form.target = ''; // Reset target to default after submission
        }
    </h:outputScript>
</h:form>

后端 Bean

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean
@ViewScoped
public class Bean {
    private String newUrl;

    public void forwardToPage() {
        // 调用外部 API 获取 URL
        newUrl = callExternalApiAndGetUrl();
    }

    public String getNewUrl() {
        return newUrl;
    }

    public void setNewUrl(String newUrl) {
        this.newUrl = newUrl;
    }

    private String callExternalApiAndGetUrl() {
        // 模拟调用外部 API 并返回 URL
        return "https://example.com";
    }
}

解释

  1. JSF 页面:

    • <h:form>target 属性设置为 _blank,表示表单提交时将在新窗口打开。
    • <h:commandButton>onclick 事件触发 submitFormInNewWindow 函数。
    • submitFormInNewWindow 函数中,通过设置表单的 target 属性为 _blank 并调用 form.submit() 方法,在新窗口中提交表单。提交完成后,重置 target 属性为空字符串以恢复默认行为。
  2. 后端 Bean:

    • forwardToPage 方法调用外部 API 并设置 newUrl 属性。

这种方法利用了 HTML 表单的 target 属性,可以在新窗口中打开页面,而不需要使用 AJAX。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?