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

时间:2012-11-28 06:23:55

标签: java javascript html jsf-2 facelets

在我的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源代码以及表单值?

1 个答案:

答案 0 :(得分:1)

  

但我只是使用空输入字段而不是HTML源以及用户输入的值来获取表单。

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


  

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

您之前的问题已经回答了这个问题,您从未提供过反馈:Get the URL of current XHTML page which has user data filled in the form into the JSF Managed bean。在您的特定情况下,甚至可以更简单,因为您显然已经是会话范围的bean(然而这仍然是糟糕的设计,因为同一会话中多个浏览器窗口/选项卡中的同一页面可能会相互干扰): / p>

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();
    // ...
}