在我的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源代码以及表单值?
但我只获得带有空输入字段而不是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();
// ...
}