【问题标题】:Filling a HTML form with properties from a Java Bean and JSP?用 Java Bean 和 JSP 的属性填充 HTML 表单?
【发布时间】:2011-11-03 13:05:14
【问题描述】:

我的网页是这样的:

<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 中的属性填写该表单的输入字段。我的问题是,是否有某种方法可以像 &lt;jsp:setProperty name="form4" property="*"/&gt; 那样自动填写表格,但向后填写?

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

我还是 JSP 的新手,对 JSTL 或任何像 Struts 这样的框架不太了解,非常感谢任何帮助。

【问题讨论】:

    标签: jsp javabeans forms


    【解决方案1】:

    我的问题是,是否有某种方法可以像 &lt;jsp:setProperty name="form4" property="*"/&gt; 那样自动填写表格,但要向后填写?

    没有。您需要自己做,或者使用基于 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>
    

    (这反过来也会立即最小化 &lt;jsp:useBean&gt; 和所有 Servlet 代码样板)

    【讨论】:

    • 感谢您的回答!特意提醒一下使用${fn:escapeXml(bean.textName)},我的文字都没有用到!
    • 不客气。当您重新显示用户控制的数据时,这确实非常重要,因为它可以防止 XSS 攻击。
    猜你喜欢
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 2012-09-12
    • 2012-08-21
    • 2019-03-01
    • 1970-01-01
    相关资源
    最近更新 更多