我有一个包含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"; } }
如果问题是动作属性的数量,请手动公开POJO或使用ModelDriven。
手动执行很简单,例如:
public class UserController { private User user; // Plus public getter and setter }
然后,在JSP中,您可以User按名称引用属性:
User
<s:form ...> <s:textfield key="user.firstName"/> ...
ModelDriven从理论上讲,使用它甚至更容易,因为它会自动放置在堆栈中。确保仅在需要时才实例化新模型,但基本上(从内存中)实例化是很棘手的:
ModelDriven
public class UserController implements ModelDriven<User> { private User user; public User getModel() { return user; } }
User由于将User压入堆栈,因此直接在JSP中使用属性:
<s:form ...> <s:textfield key="firstName"/> ...
同样,在提交表单时,会创建一个模型并将其用作方法的第一个目标。
请记住,您永远不会将对象发送到Java端:您总是并且仅发送字符串(通过常规HTTP表单提交)。服务器端可能会有魔术将这些字符串转换为对象,但这仅仅是魔术。魔术和希望。