1

我有一个包含 30 个不同字段的表单。将它们全部传递给控制器​​需要为每个具有一个属性以及一对 getter、setter。

我要将表单字段作为对象并将对象发送到控制器。

我正在使用以下代码*但有些人建议从 jsp 调用 java 方法并改用 JSTL 是一种不好的做法,但不知道如何使用 JSTL 来实现它。有没有其他方法可以做到这一点?*

我的 JSP

 <s:form>
 code to implement form goes here
 </s:form> 

<jsp:useBean id="obj" class="com.User"/>

    <jsp:setProperty property="*" name="obj"/>

      <%
         String myoutput = myController.Xclass(obj);
         out.print(myoutput);
         if(myController.Xclass(obj).equals("output"))
            {
               out.print("The form is successfully submitted.");
            }
      %>

控制器

  public String Xclass(User obj){
           return "output";
        }

为了澄清我的类图如下:

User Class {
 all the attributes and getters setters
}

myController class extends User {

    public String XClass(User obj){
       ... work on the inputes ...
      return "output";
    }
}
4

1 回答 1

1

如果操作属性的数量是问题,请手动公开 POJO,或使用ModelDriven

手动操作很简单,例如:

public class UserController {
    private User user; // Plus public getter and setter
}

然后在 JSP 中可以User按名称引用属性:

<s:form ...>
  <s:textfield key="user.firstName"/>
  ...

理论上使用ModelDriven更容易,因为它是自动放入堆栈的。确保仅在需要时才实例化新模型可能很棘手,但基本上(从内存中):

public class UserController implements ModelDriven<User> {
    private User user;
    public User getModel() { return user; }
}

由于被压入堆栈User,因此直接在 JSP 中使用属性:User

<s:form ...>
  <s:textfield key="firstName"/>
  ...

同样,在提交表单时,会创建一个模型并将其用作方法的第一个目标。

请记住,您永远不会将对象发送到 Java 端:您总是且仅发送字符串(来自正常的 HTTP 表单提交)。服务器端可能有将这些字符串转换为对象的魔法,但这就是:魔法。魔法和希望。

于 2013-02-13T00:22:18.030 回答