2.3. 表单的显示

下面是表单的输出, 使用了类 JSP 的表示法.

Example 2.1. 表单结构的类 JSP 描述


<form method="post" action="?">
    <input type="hidden" name="_forward_" value="${requestScope._forward_}" />
<%-- 不可编辑字段
    ${entityBean}
--%>

<%-- 可编辑字段
    <%-- 无默认值, 如果提交失败填充提交值.
        ${formBean}
        ${formError}
    --%>
    <%-- 有默认值, 如果提交失败恢复默认值.
        ${entityBean}
        ${formError}
    --%>
    <%-- 有默认值, 如果提交失败填充提交值.
        <c:out value="${formBean}" default="${entityBean}"/>
        ${formError}
    --%>
--%>
</form>

	

_forward_ 字段是表单处理完成(成功或者失败)之后将要跳转到的页面的相对或者绝对 URL, 在控制器中设置. 控制器先从 Request 中读取 _forward_ 参数的值, 如果为空, 再读取 HTTP Header 的 Referer 值. 如果两者都为空, 控制器将抛出异常.

不可编辑字段只作为显示信息, 使用合适的格式输出即可.

该表单在用户初次进入时和提交失败时都被显示, 所以表单字段的填充值有下列情况:

无默认值, 如果提交失败不填充表单

该方法一般不常用.

无默认值, 如果提交失败使用 FormBean 填充表单

在实体的添加表单中一般使用该方法, 如注册表单. 也用在登录表单等.

有默认值, 使用 EntityBean 作为默认值, 如果提交失败使用 EntityBean 填充表单

该方法一般不常用.

有默认值, 使用 EntityBean 作为默认值, 如果提交失败使用 FormBean 填充表单

在实体的编辑表单中一般使用该方法, EntityBean 从持久层中读取并填充表单, 提交后将新值交持久层保存.

因为显示表单是视图的职责, 所以, Controller 只需要提供可能的数据便可以了.