我的表格有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";
}
}
答案 0 :(得分: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; }
}
直接在JSP中使用User
属性,因为User
被推入堆栈:
<s:form ...>
<s:textfield key="firstName"/>
...
同样,在表单提交时,会创建一个模型并将其用作方法的第一个目标。
请记住,您永远不会向Java端发送对象:您始终只发送字符串(来自正常的HTTP表单提交)。服务器端可能存在将这些字符串转换为对象的魔法,但它只是:魔术。魔力和希望。