使用Java Bean和JSP中的属性填充HTML表单?

时间:2011-11-03 13:05:15

标签: jsp javabeans html-form

我的网页上有这样的表格:

<html>
<head>
    ...
</head>
<body>
<form id="form4" name="form4" method="post" action="Receive.jsp">
    <input name="inputField1" type="text"/>
    ...
    <input type="submit" value="Send"/>
</form>
</body>

</html>

然后在我的Receive.jsp中使用:

<jsp:useBean id="form4" class="control.FormBean4" scope="session"/>
<jsp:setProperty name="form4" property="*"/>

要将表单中的所有输入数据都添加到Bean中,然后我会用它做一些事情。现在,我想要做的是将数据从Bean重定向到另一个JSP中,并在其中包含另一个表单,并使用我的Bean中的属性填充该表单的输入字段。我的问题是,是否有某种方法可以自动填写表格,如<jsp:setProperty name="form4" property="*"/>但向后填充?

我已经尝试了<jsp:getProperty name="form4" property="*"/>,但它显然不起作用(我在JSP参考中的某处读到这是无效的),所以我想知道你是否知道某种方法可以做到这一点,因为我不仅仅有一个表单,每个表单都有一堆字段,我想保存所有逐个设置值的工作。

我仍然是JSP的新手,对于JSTL或任何像Struts这样的框架并不是很了解,我们将非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

  

我的问题是,是否有某种方法可以自动填写表格,如<jsp:setProperty name="form4" property="*"/>但向后填充?

没有。您需要自己动手,或者前往基于JSP / Servlet的MVC框架,如JSF,Struts,Spring-MVC等。

自己动手:

<input type="text" name="textName" value="${fn:escapeXml(bean.textName)}" />
<select name="dropdownName">
  <c:forEach items="${bean.dropdownOptions}" var="dropdownOption">
    <option value="${dropdownOption.key}" ${bean.dropdownName == dropdownOption.key ? 'selected' : ''}>${dropdownOption.value}</option>
  </c:forEach>
</select>
<c:forEach items="${bean.checkboxOptions}" var="checkboxOption">
  <c:forEach items="${bean.checkboxName}" var="checkboxName">
    <c:if test="${checkboxName == checkboxOption.key}">
      <c:set var="checked" value="true" />
    </c:if>
  </c:forEach>
  <input type="checkbox" name="checkboxName" value="${checkboxOption.key}" ${checked ? 'checked' : ''}>${checkboxoption.value}<br/>
</c:forEach>

要使用例如JSF:

<h:inputText value="#{bean.textName}" />
<h:selectOneMenu value="#{bean.dropdownName}">
  <f:selectItems value="#{bean.dropdownOptions}" />
</h:selectOneMenu>
<h:selectManyCheckbox value="#{bean.checkboxName}">
  <f:selectItems value="#{bean.checkboxOptions}" />
</h:selectManyCheckbox>

(反过来也会立即最小化<jsp:useBean>和所有Servlet代码样板)