gpt4 book ai didi

java - 为什么 Struts 2 不提供更简单的方法来检索请求参数?

转载 作者:行者123 更新时间:2023-12-02 22:23:02 24 4
gpt4 key购买 nike

我将应用程序从 servlet 重写为 Struts 2。

以前为了获取参数值我可以这样写:

request.getParameter("name");

现在我应该做的:

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

当我使用 servlet 时,事情变得容易多了!

为了使代码更干燥,我可以创建扩展 ActionSupport 的类 CustomActionSupport 并将此代码放在那里。但为什么 Struts 不为我做呢?我怎样才能让我的生活更轻松?

我使用 ParameterAware 作为文档 says that it's a preferred way .

最佳答案

Struts2 的正常用例是具有与参数相对应的操作属性,并让 parameters interceptor在执行操作之前为您设置这些。

Struts2 试图隐藏您的操作是作为 HTTP 请求的结果被调用的事实。尝试直接使用参数是在对抗这种范式。


Here's a small example依赖于参数拦截器。首先,定义一个值对象。

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... */

}

定义您的 Struts2 操作以使用 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. */
}

}

现在创建一个使用您的操作的表单:

<s:form action="name">
<s:textfield name="name.firstName" label="First name" />
<s:textfield name="name.surname" label="Last name" />
<s:submit/>
</s:form>

现在,当表单提交给 NameAction 时,参数将在您的 Name 对象上设置。

您可以设置框架来执行更多操作,例如验证参数、使用 IoC 容器将您的操作注入(inject)对象等。

关于java - 为什么 Struts 2 不提供更简单的方法来检索请求参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13407065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com