- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题:如何验证数组的元素?
我想使用 struts2 编写一个简单的应用程序,要求用户输入 10 个数字。
enter.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Enter 10 numbers!</title>
</head>
<body>
<h3>Please enter 10 numbers</h3>
<s:form action="next.action" method="post" validate="true">
<s:iterator var="i" begin="0" end="9">
<s:label value="Number %{#i+1}"/>
<s:textfield name="number" key="label.number" size="20"/>
</s:iterator>
<s:submit method="execute" key="label.next" align="center" />
</s:form>
</body>
</html>
我使用迭代器生成了 10 个文本区域供用户输入数字。我希望所有字段都是必填项。
NextAction.java
import com.opensymphony.xwork2.ActionSupport;
import java.util.ArrayList;
public class NextAction extends ActionSupport{
private Integer[] number;
public Integer[] getNumber() {
return number;
}
public void setNumber(Integer[] number) {
this.number = number;
}
public String execute(){
return "success";
}
}
这个类唯一的属性是数字。请注意,因为我生成了 10 个具有相同名称“number”的文本区域,所以我将在此类中获得的“number”将是一个长度为 10 的整数数组。当我不使用下面的验证时,我可以轻松获得用户输入的数字(即 number[i]),然后在另一个 jsp 中显示它们。
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>Number</display-name>
<welcome-file-list>
<welcome-file>enter.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.custom.i18n.resources" value="ApplicationResources" />
<package name="default" extends="struts-default" namespace="/">
<action name="forward" class="NextAction">
<result name="success">success.jsp</result>
result name="input">enter.jsp</result>
</action>
</package>
</struts>
NextAction-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="number"> <!-- The field 'number' here is actually holding an array -->
<field-validator type="required">
<message key="errors.required"/>
</field-validator>
<field-validator type="int">
<param name="min">1</param>
<param name="max">100</param>
<message key="errors.number"/>
</field-validator>
</field>
</validators>
但是当我添加这个验证时,因为字段“number”是数组,那么这个验证将不起作用。(如果只有一个名为'number'的textarea,这个验证就可以了。但是我们有10个)
我的问题是如何验证我们从提交的表单中获得的数组的每个元素?希望我的问题很清楚。
谢谢
最佳答案
您不太可能会重用此 validator ,因此只需在操作中使用 validator 即可:
import com.opensymphony.xwork2.ActionSupport;
import java.util.ArrayList;
public class NextAction extends ActionSupport{
private Integer[] number;
public Integer[] getNumber() {
return number;
}
public void setNumber(Integer[] number) {
this.number = number;
}
//Following is default behaviour so it is not worth writing
//public String execute(){
// return "success";
//}
//add validation in action (_not tested_)
public void validate(){
if (number.length > 10){
this.addActionError("Error: More than ten numbers supplied.");
}else if (number.length < 10){
this.addActionError("Error: Less than ten numbers supplied.");
}
for (int i = 0; i < number.length; i++){
if(number[i] < 0){
this.addActionError("Error: Number " + (i + 1) + " is less than zero.");
}else if(number[i] > 100){
this.addActionError("Error: Number " + (i + 1) + " is greater than 100.");
}
}
}
}
然后用<s:actionerror />
在jsp中显示字段错误或重写上面的内容以专门命名字段(带索引),在这种情况下您可以使用 ,并且您将使用 addFieldError 方法。有关这些标签的详细信息,请参阅 http://struts.apache.org/2.3.1.2/docs/tag-reference.html
关于java - 数组的 Struts2 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9969024/
在 JSF2 应用程序中遇到验证属性的问题时,有两种主要方法。 使用 Annotation 在 ManagedBean 上定义验证 @ManagedBean public class MyBean {
我想实现一个不常见的功能,我认为 jquery 验证插件将是最好的方法(如果您在没有插件的情况下建议和回答,我们也会欢迎)。我想在用户在输入字段中输入正确的单词后立即隐藏表单。我试过这个: $("
我有几个下拉菜单(类名为month_dropdown),并且下拉菜单的数量不是恒定的。我怎样才能为它们实现 NotEqual 验证。我正在使用 jQuery 验证插件。 这就是我写的 - jQuery
我设法制作了这个网址验证代码并且它起作用了。但我面临着一个问题。我认为 stackoverflow 是获得解决方案的最佳场所。 function url_followers(){ var url=do
我目前正在使用后端服务,该服务允许用户在客户端应用程序上使用 Google Games 库登录。 用户可以通过他们的 gplay ID 向我们发送信息,以便登录或恢复旧帐户。用户向我们发送以下内容,包
我正在尝试验证输入以查看它是否是有效的 IP 地址(可能是部分地址)。 可接受的输入:172、172.112、172.112.113、172.112.113.114 Not Acceptable 输入
我从 Mongoose 验证中得到这条消息: 'Validator failed for path phone with value ``' 这不应该发生,因为不需要电话。 这是我的模型架构: var
我一直在尝试使用Python-LDAP (版本 2.4.19)在 MacOS X 10.9.5 和 Python 2.7.9 下 我想在调用 .start_tls_s() 后验证与给定 LDAP 服务
我正在处理一个仅与 IE6 兼容的旧 javascript 项目(抱歉...),我想仅在 VS 2017 中禁用此项目的 ESLint/CSLint/Javascript 验证/CSS 验证。 我知道
我正在寻找一种方法来验证 Spring 命令 bean 中的 java.lang.Double 字段的最大值和最小值(一个值必须位于给定的值范围之间),例如, public final class W
我正在尝试在 springfuse(JavaEE 6 + Spring Framework (针对 Jetty、Tomcat、JBoss 等)) 和 maven 的帮助下构建我的 webapps 工作
我试图在我们的项目中使用 scalaz 验证,但遇到了以下情况: def rate(username: String, params: Map[String, String]): Validation
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
我有一个表单,人们可以单击并向表单添加字段,并且我需要让它在单击时验证这些字段中的值。 假设我单击它两次并获取 2 个独立的字段集,我需要旋转 % 以确保它在保存时等于 100。 我已放入此函数以使其
在我的页面中有一个选项可以创建新的日期字段输入框。用户可以根据需要创建尽可能多的“截止日期”和“起始日期”框。就像, 日期_to1 || date_from1 日期到2 ||日期_from2 date
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
有没有办法在动态字段上使用 jquery 验证表单。 我想将其设置为必填字段 我正在使用 Jsp 动态创建表单字段。 喜欢 等等...... 我想使用必需的表单字段验证此表单字段。 最佳答
嗨,任何人都可以通过提供 JavaScript 代码来帮助我验证用户名文本框不应包含数字,它只能包含一个字符。 最佳答案 使用正则表达式: (\d)+ 如果找到匹配项,则字符串中就有一个数字。 关于J
我有两个输入字段holidayDate和Description(id=tags) $(document).ready(function() {
我遇到了这个问题,这些验证从电子邮件验证部分开始就停止工作。 我只是不明白为什么即使经过几天的观察,只是想知道是否有人可以在这里指出我的错误? Javascript部分: function valid
我是一名优秀的程序员,十分优秀!