gpt4 book ai didi

java - Struts 2 请求参数验证(Int 和字符串)

转载 作者:行者123 更新时间:2023-11-29 05:49:43 25 4
gpt4 key购买 nike

假设我这里有这个 URL

<s:url action ="profile" var ="profile_url">
<s:param name = "id">${user.userId}</s:param>
</s:url>
<s:a href = "%{profile_url}">My Profile</s:a>

其中参数 id 将只有一个 int 值。所以在我的 Action 类中。

public class ViewProfileAction extends ActionSupport{

public String execute(){
//someServiceLayer.getUser(id);
return "success";
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

private int id;
}

只要用户点击链接,一切似乎都很顺利,所以如果用户点击链接,url 将是这样的

localhost:8090/HelloStruts2/profile?id=1

但是如果用户直接操作 URL 怎么办?他在浏览器中手动输入了一个字母或字符?像这样

localhost:8090/HelloStruts2/profile?id=b

如果用户那样做,我确定会出现异常或发生错误。

我的问题是如何验证 URL 参数?或者如果用户做了这样的事情(在参数 id 中输入了一个字母或一个负数),我会将他重定向到另一个页面。

最佳答案

您有一个参数字段为 int,但您在 URL 中将其设置为 String。要消除此类错误,您需要在 params 拦截器之前(或无关紧要的之后)放置一些拦截器以检查该值。例如,您放置了 validation 拦截器。

@Action(value = "youraction", results = {
@Result(location = "/path/to/page.jsp"),
}, interceptorRefs = {@InterceptorRef("validation"), @InterceptorRef("basicStack")})

然后你需要在你的 Action 中实现validate()方法

public void validate() {}

最后添加处理错误和好的结果的方法,所以OGNL不会提示

public void setId(String id) {
try {
this.id = Integer.parseInt(id);
} catch (NumberFormatException nfe){}
}

就是这样,您不再有异常,String 类型的参数在 setter 中被检查。

关于您的问题:如果您的参数未正确解析,您在 execute() 方法中的值为 0。因此,您决定返回什么结果。您还可以检查 validate() 方法中的值,如果放置在 params 拦截器之后的 validation 拦截器执行解析或 GenericValidator.isInt 之后 setFieldError() 并在 JSP 中显示它或在验证后立即重定向。

关于java - Struts 2 请求参数验证(Int 和字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14396601/

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