java - Java 的简单表单处理 API

标签 java jquery ruby-on-rails forms bean-validation

我正在寻找一个非常简单的 Java 表单处理 API。假设表单输入字段对应于 bean 属性,并且所有 bean 都有 javax.Validation 注释,理想情况下 API 会:

  • 将 bean 显示为 html 表单
  • 使用请求参数填充 Bean,包括适用的嵌套对象
  • 使用验证注释验证输入
  • 如果出现错误,请在表单顶部显示错误,并突出显示错误字段。

另外:

  • 如果我不必购买整个应用程序框架,那就太好了,因为我正在使用旧版应用程序。
  • 允许配置更复杂的用例,但默认情况下仅使用约定。

奖金:

  • 也生成 JavaScript 客户端验证。

注意:如果这需要多个不同的库,那也没关系。

更新:

由于我从未找到我想要的东西,并且迁移到 Spring 也不是一个选择,所以我继续推出自己的解决方案。它被亲切地称为java in jails (大致模仿 rails 形式处理)。它为您提供了非常简单(而且漂亮)的表单创建、客户端和服务器端验证以及请求参数到对象的映射。无需配置。

示例 Bean:

public class AccountForm {
    @NotBlank(groups = RequiredChecks.class)
    @Size(min = 2, max = 25)
    private String name;
//...
}

表格示例:

<%@ taglib uri="http://org.jails.org/form/taglib" prefix="s" %>
<s:form name="accountForm" action="/jails-demo/jails" label="Your Account Details" style="side">
    <s:text name="name" label="Name" size="25" />
    <s:text name="accountName" label="Account Name" size="15" />
    ...
</s:form>

示例验证和映射:

SimpleValidator validator = new SimpleValidator();

if ("submit".equals(request.getParameter("submit"))) {
    Map<String, List<String>> errors = validator.validate(AccountForm.class, request.getParameterMap());

    if (errors != null) {
        AccountForm account = validator.getMapper().toObject(AccountForm.class, request.getParameterMap());
        //do something with valid account
    } else {
        SimpleForm.validateAs(AccountForm.class).inRequest(request).setErrors(errors);
        //handle error
    }
} else {
    SimpleForm.validateAs(AccountForm.class).inRequest(request);
    //forward to formPage
}

这就是表单的样子,使用 jQuery 进行客户端验证(由 Position Absolute 提供):

enter image description here

最佳答案

我认为您不会找到具有大部分此功能且不是框架的东西。

我可以推荐 Spring MVC - 您可以轻松地将其插入旧应用程序中。它支持以上所有内容。

自己动手也不会那么难:

  • 使用 BeanUtils.populate(bean, request.getParameterMap()) 用请求参数填充您的对象
  • 手动使用javax.validation.* - here is how 。为每个错误添加请求属性,您稍后可以将其显示为错误。

请注意,无论哪种方式,您都必须手动编写 html 代码。

关于java - Java 的简单表单处理 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6589106/

相关文章:

java - 外部 Voronoi 库 "Mesh": What is Sketch and Processing?

java - 字符串和数组混合语法以及非常罕见的用法

java - Hamcrest 匹配器的多个 hasProperty 约束

ruby-on-rails - 当 Controller 方法存在、路由已定义且 View 调用它时,为什么我会收到路由错误?

javascript - Zurb Foundation 下拉菜单不起作用

java - 遍历 JSP 中的列表对象

jquery - 这个 jQuery 选择器到底是如何工作的?

javascript - 如何阻止 IE (Internet Explorer) 中的内联 block 元素获得焦点

jquery - 我如何使用不同的颜色?

ruby-on-rails - 获取哈希符号后的请求部分