如何使用JavaScript将输入表单值与整页HTML源一起传递给辅助bean?

问题描述 投票:1回答:1

在我的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>

像这样我也有其他形式的字段。当用户输入表单中的所有数据并单击提交按钮时,我将使用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源代码以及表单值?

java javascript html jsf-2 facelets
1个回答
1
投票

但我只获得带有空输入字段而不是HTML源的表单以及用户输入的值。

这是预期的行为。这种方法只有在您已经提交表格并因此重新显示提交的表格(作为确认类型)时才有效。


如何获取HTML源代码以及表单值?

这已经在您之前的问题中得到了回答,您从未提供过反馈:Get the URL of current XHTML page which has user data filled in the form into the 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();
    // ...
}
© www.soinside.com 2019 - 2024. All rights reserved.