簡體   English   中英

如何使用JavaScript將輸入表單值以及整個頁面HTML源代碼傳遞給后備bean?

[英]How to get the input form values along with whole page HTML source using JavaScript to pass it to backing bean?

在我的Facelets頁面中,我有一個<div> ,其中包含一些輸入文本框,供用戶輸入要提交的值。 我將使用此HTML源生成PDF。

<div id="wrapper">
    <h:form prependId="false">
        <h:inputHidden id="source" value="#{bean.source}" />
        <h:inputText id="fName" value="#{bean.firstName}"/>
        <h:inputText id="lName" value="#{bean.lastName}"/>
        <h:inputText id="age" value="#{bean.age}"/>
    </h:form>
</div>

像這樣,我也有其他表單字段。 當用戶在表單中輸入所有數據並單擊Submit按鈕時,我正在使用JavaScript在此<div>獲取源代碼。

function getHtml() {
    document.getElementById('source').value = document.getElementById('wrapper').innerHTML;
}

並單擊提交傳遞給bean。

<h:commandButton type="submit" id="appl-submit" action="#{bean.submit}"
                 value="Submit" onclick="javascript:getHtml();"/>

在支持bean類中

@ManagedBean
@SessionScoped
public class Bean{

    private String firstName;
    private String lastName;
    private int age;
    private String source;

    // Getters and setters for all properties.
}

但是我只得到帶有空輸入字段的表單,而不是帶有用戶輸入值的HTML源。 如何獲取HTML源代碼和表單值?

但是我只得到帶有空輸入字段的表單,而不是帶有用戶輸入值的HTML源。

這是預期的行為。 僅當您已經提交了表單並因此重新顯示提交的表單(作為一種確認)時,此方法才有效。


如何獲取HTML源代碼和表單值?

您在上一個問題中已經回答了該問題,您從未提供過反饋: 獲取當前XHTML頁面的URL,該頁面的用戶數據已填寫到JSF Managed bean中 在您的特定情況下,這甚至可以更簡單地完成,因為您顯然已經擁有一個會話范圍的bean(但是,由於同一個會話中多個瀏覽器窗口/選項卡中的同一個頁面可能會相互干擾,因此設計仍然很糟糕):

public void submit() throws IOException {
    ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
    HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
    HttpSession session = (HttpSession) externalContext.getSession(true);
    String url = request.getRequestURL().append(";jsessionid=").append(session.getId()).toString();

    Document doc = Jsoup.connect(url).get();
    String html = doc.select("#wrapper").html();
    // ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM