And*_*lov 2 java servlets struts2
我将应用程序从 servlet 重写为 Struts 2。
以前为了获取参数值,我可以写:
request.getParameter("name");
Run Code Online (Sandbox Code Playgroud)
现在我应该这样做:
public class MyAction implements ParameterAware {
private Map<String, String[]> parameters;
@Override
public void setParameters(Map<String, String[]> parameters) {
this.parameters = parameters;
}
public String getParameterValue(String name){
return parameters.get(name)[0];
}
// get this parameter
Run Code Online (Sandbox Code Playgroud)
当我使用 servlet 时,这要容易得多!
为了使代码干燥,我可以创建扩展 ActionSupport 的类 CustomActionSupport 并将此代码放在那里。但是为什么 Struts 不为我做呢?我怎样才能让我的生活更轻松?
我使用 ParameterAware 作为文档说这是一种首选方式。
Struts2 的正常用例是拥有与参数对应的动作属性,并让参数拦截器在执行动作之前为您设置这些。
Struts2 试图隐藏这样一个事实,即您的操作是作为 HTTP 请求的结果调用的。尝试直接使用参数正在与这种范式作斗争。
public class Name {
private String firstName;
private String surname;
public void setFirstName(String s) {
this.firstName = s;
}
public void setSurname(String s) {
this.surname = s;
}
/* Some interesting operations on Name... */
}
Run Code Online (Sandbox Code Playgroud)
定义要使用的 Struts2 操作Name。name 的属性将在execute()调用之前使用 HTTP 参数设置。
public class NameAction extends Action {
private final Name name = new Name();
public Name getName() {
return name;
}
public String execute() {
/* Use "name" to do something interesting; its properties are set. */
}
}
Run Code Online (Sandbox Code Playgroud)
现在创建一个使用您的操作的表单:
<s:form action="name">
<s:textfield name="name.firstName" label="First name" />
<s:textfield name="name.surname" label="Last name" />
<s:submit/>
</s:form>
Run Code Online (Sandbox Code Playgroud)
现在,Name当表单提交到NameAction.
您可以将框架设置为执行更多操作,例如验证参数、使用 IoC 容器向您的操作注入对象等。
| 归档时间: |
|
| 查看次数: |
1412 次 |
| 最近记录: |