- 浏览: 522289 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (278)
- java (41)
- 设计模式 (4)
- sql (10)
- webservice (2)
- spring (9)
- struts (6)
- struts2 (32)
- hibernate (27)
- Struts_hibernate_Spring整合 (4)
- Velocity (1)
- Servlet (9)
- JSP (6)
- javascript (19)
- jquery (10)
- ajax (4)
- html、xml (3)
- JDBC (2)
- JDK (6)
- mysql (2)
- oracle (11)
- SqlServer (1)
- DB2 (4)
- tool (7)
- linux (5)
- UML (1)
- eclipse (8)
- 执行文件 (1)
- 应用服务器 (4)
- 代码重构 (1)
- 日本語 (19)
- 交规 (1)
- office (9)
- firefox (1)
- net (1)
- 测试 (1)
- temp (6)
- 对日外包 (1)
- windows (1)
- 版本控制 (1)
- android (2)
- 项目管理 (1)
最新评论
五、 内建校验器
Struts 2 提供了大量的内建校验器,可以满足大部分应用校验需求。如果应用需要特别复杂的校验需求,开发者可以开发自己的校验器
1. 注册校验器
xwork-2.1.2.jar 文件 , com/opensymphony/xwork2/validator/validators 路径下有个 default.xml ,这个是 Struts 2 默认 的校验器注册文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator Config 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd"> <!-- START SNIPPET: validators-default --> <validators> <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/> <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/> <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/> <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/> <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/> <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/> <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/> <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/> <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/> <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/> <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/> <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/> <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/> <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/> <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/> <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/> </validators> <!-- END SNIPPET: validators-default -->
如果开发者开发了一个自己的校验器,则可以通过添加一个 validators.xml 文件
(放在 WEB-INF/classes 路径下) 来注册校验器。 validators.xml 内容 与
default.xml 相似。
注意:
如果 Struts 2 在
WEB-INF/classes 路径下 找到一个 validators.xml,则不会再加载系统默认的 default.xml
。因此,如果开发者提供了自己的校验器注册文件(validators.xml),一定要把 default.xml 文件里的内容全部复制到
validators.xml 中
2. 必填校验器
必填校验器名字是 required ,指定字段必须有值(非空)。
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定 该参数
非字段校验器风格:
<validators> <validator type="required"> <!-- 指定需要校验的字段名 --> <param name="fieldName">username</param> <!-- 指定校验失败的提示信息 --> <message>username must not be null</message> </validator> </validators>
字段校验器风格:
<validators> <field name="username"> <field-validator type="required"> <!-- 指定校验失败的提示信息 --> <message>username must not be null</message> </field-validator> </field> </validators>
3. 必填字符串校验器
必填字符串校验器名字是: requiredstring ,要求字段值必须是非空且长度大于0,即不能是""。
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定 该参数
trim
:是否在校验前截去前后空白,默认 true。
非字段校验器风格:
<validators> <validator type="requiredstring"> <!-- 指定需要校验的字段名 --> <param name="fieldName">username</param> <param name="trim">true</param> <!-- 指定校验失败的提示信息 --> <message>username must not be null</message> </validator> </validators>
字段校验器风格:
<validators> <field name="username"> <field-validator type="requiredstring"> <param name="trim">true</param> <!-- 指定校验失败的提示信息 --> <message>username must not be null</message> </field-validator> </field> </validators>
4. 整数校验器
整数包括 int ,long 和 short ,该校验器要求字段的整数值必须在指定范围内。
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定 该参数
min :指定该属性最小值,可选,如果没有指定,则不检验最小值
max :指定该属性的最大值,可选,如果没有指定,则不检验最大值。
非字段校验器风格:
<validators> <validator type="int"> <!-- 指定需要校验的字段名 --> <param name="fieldName">age</param> <param name="min">20</param> <param name="max">50</param> <!-- 指定校验失败的提示信息 --> <message>age needs to bo between ${min} and ${max} </message> </validator> </validators>
字段校验器风格:
<validators> <field name="age"> <field-validator type="int"> <param name="min">20</param> <param name="max">50</param> <!-- 指定校验失败的提示信息 --> <message>age needs to bo between ${min} and ${max} </message> </field-validator> </field> </validators>
5. 日期校验器
日期校验器是 date ,要求字段的日期值必须在指定范围内。
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定 该参数
min :指定该属性最小值,可选,如果没有指定,则不检验最小值
max :指定该属性的最大值,可选,如果没有指定,则不检验最大值。
注意: 如果系统没有指定日期转换器,则默认使用 XWorkBasicConverter 完成日期转换。默认使用 struts.properties 里指定的 Locale,或者系统默认的 Locale 的 Date.SHORT 格式来进行日期转换
非字段校验器风格:
<validators> <validator type="date"> <!-- 指定需要校验的字段名 --> <param name="fieldName">birth</param> <param name="min">1990-01-01</param> <param name="max">2010-01-01</param> <!-- 指定校验失败的提示信息 --> <message>Birthday must to bo between ${min} and ${max}</message> </validator> </validators>
字段校验器风格:
<validators> <field name="birth"> <field-validator type="date"> <param name="min">1990-01-01</param> <param name="max">2010-01-01</param> <!-- 指定校验失败的提示信息 --> <message>Birthday must to bo between ${min} and ${max}</message> </field-validator> </field> </validators>
6. 表达式校验器
名字 expression ,它是个非字段校验器,即不可用在字段校验器风格的配置中。 该表达式校验器要求 OGNL 表达式返回 true,当返回 true 时,该校验通过;否则,就算校验没通过
参数:
expression : 该参数指定一个逻辑表达式,该逻辑表达式基于 ValueStack
进行求职,最后返回一个 boolean 值;当返回 true 时 通过,
否则校验失败
非字段校验器风格:
<validators> <validator type="expression"> <!-- 指定校验表达式 --> <param name="expression">....</param> <!-- 指定校验失败的提示信息 --> <message>Failed to meet Ognl Expression ....</message> </validator> </validators>
7. 字段表达式校验器
名字是 fieldexpression , 它要求指定字段满足一个逻辑表达式。
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定该参数
expression : 该参数指定一个逻辑表达式,该逻辑表达式基于 ValueStack
进行求职,最后返回一个 boolean 值;当返回 true 时 通过,
否则校验失败
非字段校验器风格:
<validators> <validator type="fieldexpression"> <param name="fieldName">pass</param> <param name="expression"><![CDATA[(pass == rpass) ]]></param> <!-- 指定校验失败的提示信息 --> <message>密码必须和确认密码相等</message> </validator> </validators>
字段校验器风格:
<validators> <field name="pass"> <field-validator type="fieldexpression"> <param name="expression"><![CDATA[(pass == rpass) ]]></param> <message>密码必须和确认密码相等</message> </field-validator> </field> </validators>
8. 邮件地址校验器
名字是 email ,它要求被检查字段的字符如果非空,则必须是合法的邮件地址。不过这个校验器其实就是基于正则表达式进行校验的,
系统的邮件地址正则表达式是 :
\\b(^[_A-Za-z0-9-](\\.[_A-Za-z0-9-])*@([A-Za-z0-9-])+((\\.com)|(\\.net)|(\\.org)|(\\.info)|(\\.edu)|(\\.mil)|(\\.gov)|(\\.biz)|(\\.ws)|(\\.us)|(\\.tv)|(\\.cc)|(\\.aero)|(\\.arpa)|(\\.coop)|(\\.int)|(\\.jobs)|(\\.museum)|(\\.name)|(\\.pro)|(\\.travel)|(\\.nato)|(\\..{2,3})|(\\..{2,3}\\..{2,3}))$)\\b
注意: 上面的正则表达式可能不能完全覆盖
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定该参数
非字段校验器风格:
<validators> <validator type="email"> <param name="fieldName">email</param> <!-- 指定校验失败的提示信息 --> <message>邮件必须有效地址</message> </validator> </validators>
字段校验器风格:
<validators> <field name="email"> <field-validator type="email"> <message>邮件必须有效地址</message> </field-validator> </field> </validators>
9. 网址校验器
名称是 url , 它要求被检查字段的字符如果非空,则必须是合法的 URL 地址。这个也是基于正则表达式进行校验的。
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定该参数
非字段校验器风格:
<validators> <validator type="url"> <param name="fieldName">url</param> <!-- 指定校验失败的提示信息 --> <message>您的主页地址必须是有效的网址</message> </validator> </validators>
字段校验器风格:
<validators> <field name="url"> <field-validator type="url"> <message>您的主页地址必须是有效的网址</message> </field-validator> </field> </validators>
10. Visitor 校验器
Visitor 校验器主要用于校验 Action 里的复合属性 ,例如:一个 Action 里包含了 User 类型的属性。
假设有下面的 Action 类:
import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ActionContext; import java.util.*; import java.util.regex.*; import java.text.*; public class RegistAction extends ActionSupport { //Action里包含了一个User类型的参数 private User user; //user属性的setter和getter方法 public void setUser(User user) { this.user = user; } public User getUser() { return (this.user); } }
这种方式非常类似于前面介绍的驱动模型,即 User 类是一个最普通的 java 类,仅仅提供 4 个属性。
User 类
import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ActionContext; import java.util.*; import java.util.regex.*; import java.text.*; public class User { private String name; private String pass; private int age; private Date birth; public void setName(String name) { this.name = name; } public void setPass(String pass) { this.pass = pass; } public void setAge(int age) { this.age = age; } public void setBirth(Date birth) { this.birth = birth; } public String getName() { return (this.name); } public String getPass() { return (this.pass); } public int getAge() { return (this.age); } public Date getBirth() { return (this.birth); } }
为了
校验上面 RegistAction 的 User 属性
,显然不能通过其他校验器完成,因为那些普通校验器都只能校验基本数据类型和字符串类型。此时,为了校验该 User 类型属性里的其他属性,则应该使用 Vistior 校验器
RegistAction-validation.xml
<?xml version="1.0" encoding="GBK"?> <!-- 指定校验规则文件的DTD信息 --> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> <!-- 校验规则文件的根元素 --> <validators> <!-- 指定校验user字段 --> <field name="user"> <!-- 使用visitor校验器 --> <field-validator type="visitor"> <!-- 指定校验规则文件的context --> <param name="context">userContext</param> <!-- 指定校验失败后提示信息是否添加下面前缀 --> <param name="appendPrefix">true</param> <!-- 指定校验失败的提示信息前缀 --> <message>用户的:</message> </field-validator> </field> </validators>
上面并未指定 User 类里各字段的校验规则。因此,必须为 User 类指定对应校验规则文件。
注意: 如果 appendPrefix = true 则表示校验失败的 message 中 ,会加上 “用户的:” 前缀 ,否则将不会添加前缀
默认情况下 ,该校验文件的规则文件名为 User-validation.xml ,因为配置了 Visitor 校验器时指定了 context 为 userContext,则该校验文件的文件名为 User-userContext-validation.xml。
User-userContext-validation.xml
<?xml version="1.0" encoding="GBK"?> <!-- 指定校验配置文件的DTD信息 --> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> <!-- 校验文件的根元素 --> <validators> <!-- 校验User属性的name属性 --> <field name="name"> <!-- 指定name属性必须满足必填规则 --> <field-validator type="requiredstring"> <param name="trim">true</param> <!-- 如果校验失败,输出name.requried对应的国际化信息 --> <message key="name.requried"/> </field-validator> <!-- 指定name属性必须匹配正则表达式 --> <field-validator type="regex"> <param name="expression"><![CDATA[(\w{4,25})]]></param> <!-- 如果校验失败,输出name.regex对应的国际化信息 --> <message key="name.regex"/> </field-validator> </field> <!-- 校验User属性的pass属性 --> <field name="pass"> <!-- 指定pass属性必须满足必填规则 --> <field-validator type="requiredstring"> <param name="trim">true</param> <!-- 如果校验失败,输出pass.requried对应的国际化信息 --> <message key="pass.requried"/> </field-validator> <!-- 指定pass属性必须满足匹配指定的正则表达式 --> <field-validator type="regex"> <param name="expression"><![CDATA[(\w{4,25})]]></param> <!-- 如果校验失败,输出pass.regex对应的国际化信息 --> <message key="pass.regex"/> </field-validator> </field> <!-- 指定User属性的age属性必须在指定范围内--> <field name="age"> <field-validator type="int"> <param name="min">1</param> <param name="max">150</param> <!-- 如果校验失败,输出age.range对应的国际化信息 --> <message key="age.range"/> </field-validator> </field> <!-- 指定User属性的birth属性必须在指定范围内--> <field name="birth"> <field-validator type="date"> <!-- 下面指定日期字符串时,必须使用本Locale的日期格式 --> <param name="min">1900-01-01</param> <param name="max">2050-02-21</param> <!-- 如果校验失败,输出birth.range对应的国际化信息 --> <message key="birth.range"/> </field-validator> </field> </validators>
从上面配置文件中可以看出,这个 User-userContext-validation.xml 文件的内容与之前校验 Action 的校验文件完全相同,通过这种方式就可以对 Action 里复合类型的属性进行校验了。
因为 Action 里的属性不再是基本数据类型,而是 User 类型的属性,则将 JSP 页面进行简单的修改:
regist.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>请输入您的注册信息</title> <meta name="website" content="http://www.crazyit.org" /> <s:head/> </head> <body> <h3>请输入您的注册信息</h3> <!-- 使用Struts 2标签库生成表单 --> <s:form action="regist"> <!-- 使用s:textfield标签生成文本输入框 --> <s:textfield label="用户名" name="user.name"/> <s:password label="密码" name="user.pass"/> <s:textfield label="年龄" name="user.age"/> <s:textfield label="生日" name="user.birth"/> <s:submit/> </s:form> </body> </html>
11. 转换校验器
名称: conversion , 它检查被校验字段在类型转换过程中是否出现错误
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定该参数
repopulateField :指定当类型转换失败后,返回 input 页面时,类型转换
失败的表单域是否保留原来的错误输入。
非字段校验器风格:
<validators> <validator type="conversion"> <param name="fieldName">age</param> <param name="repopulateField">false</param> <!-- 指定校验失败的提示信息 --> <message>fail</message> </validator> </validators>
字段校验器风格:
<validators> <field name="age"> <field-validator type="conversion"> <param name="repopulateField">true</param> <message>fail</message> </field-validator> </field> </validators>
12. 字符串长度校验器
名称: stringlength ,它要求被校验字段的长度必须在指定范围内,否则校验失败。
参数
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定该参数
maxLength
: 指定字段的最大长度。参数可选,不指定时,
最大长度不受 限制
minLength
: 指定字段的最小长度。参数可选,不指定时,
最小长度不受限制
trim
: 指定校验字段之前是否截断该字段前后空白。该参数可选,默认 true
非字段校验器风格:
<validators> <validator type="stringlength"> <param name="fieldName">user</param> <param name="minLength">4</param> <param name="maxLength">20</param> <message>fail</message> </validator> </validators>
字段校验器风格:
<validators> <field name="user"> <field-validator type="stringlength"> <param name="minLength">4</param> <param name="maxLength">20</param> <message>fail</message> </field-validator> </field> </validators>
13. 正则表达式校验器
名称: regex , 它检查被校验字段是否匹配一个正则表达式。
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定该参数
expression :该参数是必须的,该参数指定匹配用的正则表达式
caseSensitive :该参数指明进行正则表达式匹配时,是否区分大小写。
参数可选,默认 true
非字段校验器风格:
<validators> <validator type="regex"> <param name="fieldName">user</param> <param name="expression"><![CDATA[(\w{4,20})]]></param> <message>你的用户名长度必须在4到20之间,且必须是字母和数字</message> </validator> </validators>
字段校验器风格:
<validators> <field name="user"> <field-validator type="regex"> <param name="expression"><![CDATA[(\w{4,20})]]></param> <message>你的用户名长度必须在4到20之间,且必须是字母和数字</message> </field-validator> </field> </validators>
14. 基于 Annotation 校验器
基于 Annotation 的输入校验实际上是 Struts 2 “零配件”特性的部分,它允许使用 Annotation 来定义每个字段应该满足的规则 ,Struts 2 在 com.opensymphony.xwork2.validator.annotations 包下提供了大量验证器 Annotation ,这些 Annotation 和前面介绍的验证器大致上一一对应 ,可以自行查看 API 文档
配置
1. 使用 @Validation()Annotation 修饰 Action 类
2. 使用验证器 Annotation 修饰 Action 里各属性对应的 setter 方法 。
下面我们在前面 I18NValidate 应用的基础上进行修改,将该应用的 WEB-INF\src\lee 路径下的校验规则文件删除 ,修改该路径下的 RegistAction.java 文件,通过注释指定各属性应该满足的规则 。修改后的 Action 如下:
import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.validator.annotations.*; import java.util.*; import java.util.regex.*; import java.text.*; //使用@Validation修饰Action类 @Validation() public class RegistAction extends ActionSupport { private String name; private String pass; private int age; private Date birth; //使用Annotation指定必填、正则表达式两个校验规则 @RequiredStringValidator(type = ValidatorType.FIELD, key = "name.requried",message = "") @RegexFieldValidator(type = ValidatorType.FIELD, expression = "\\w{4,25}",key = "name.regex",message = "") public void setName(String name) { this.name = name; } public String getName() { return (this.name); } //使用Annotation指定必填、正则表达式两个校验规则 @RequiredStringValidator(type = ValidatorType.FIELD, key = "pass.requried",message = "") @RegexFieldValidator(type = ValidatorType.FIELD, expression = "\\w{4,25}",key = "pass.regex",message = "") public void setPass(String pass) { this.pass = pass; } public String getPass() { return (this.pass); } //使用Annotation指定整数范围校验规则 @IntRangeFieldValidator(message = "", key = "age.range", min = "1", max = "150") public void setAge(int age) { this.age = age; } public int getAge() { return (this.age); } //使用Annotation指定日期范围校验规则 @DateRangeFieldValidator(message = "", key = "birth.range", min = "1900/01/01", max = "2050/01/21") public void setBirth(Date birth) { this.birth = birth; } public Date getBirth() { return (this.birth); } }
上面代码使用了验证器 Annotation 修饰了各属性的 setter 方法 。通过在 Action 中使用 Annotation 指定各字段应该满足的校验规则,就可以避免书写 XML 校验规则文件。
但是所有内容都被写入 java 代码中,会给后期维护带来一定困难
发表评论
文章已被作者锁定,不允许评论。
-
Struts1 与 Struts2 的12点区别
2011-11-16 11:14 7471) 在Action实现类方面 ... -
Struts 2 的 Ajax 支持(四)
2011-03-14 16:21 17545.4 tabbedpanel 标签 ... -
Struts 2 的 Ajax 支持(三)
2011-02-11 13:18 24445.2 submit 和 a 标签 ... -
Struts 2 的 Ajax 支持(二)
2011-01-27 14:08 2412四、 基于 Dojo 的 pub-sub 事件模型 ... -
Struts 2 的 Ajax 支持(一)
2011-01-20 14:55 2495一、 Ajax 概述 ... -
Struts 2 的拦截器(三)
2011-01-20 13:09 2913六、 拦截器示例 : 实现权限控制 权限检 ... -
Struts 2 的拦截器(二)
2011-01-12 16:38 1644四、 开发自己的拦截器 Struts 2 ... -
Struts 2 的拦截器(一)
2010-12-31 16:53 2031一、 理解拦截器 ... -
Struts 2 的标签库(五)
2010-12-29 11:35 11546.8 select 标签 以下代码 都是基 ... -
Struts 2 的标签库(四)
2010-12-24 16:21 1655六、 表单标签 表单标签,分为 2 种 : f ... -
Struts 2 的标签库(三)
2010-12-20 14:15 1982四、 数据标签 数据标签主要 ... -
Struts 2 的标签库(二)
2010-12-15 16:21 2037三、 控制标签 Str ... -
Struts 2 的标签库(一)
2010-12-13 13:47 1369一、 Struts 2 标签库概述 ... -
Struts 2 的国际化(二)
2010-12-09 13:25 2268二、 Struts 2 的国际化入门 ... -
Struts 2 的国际化(一)
2010-12-06 22:44 1313一、 程序国际化简 ... -
Struts2 上传和下载文件(三)
2010-12-03 14:58 1807三、 同时上传多个 ... -
Struts2 上传和下载文件(二)
2010-11-29 13:37 1993二、 Struts 2 的文件上传 ... -
Struts2 上传和下载文件(一)
2010-11-17 22:28 2098一、 文件上传的原理 1. 表单元 ... -
struts2 输入校验 (四)
2010-11-15 22:43 1230六、 手动完成输入校验 对于一些特殊的检验 ... -
struts2 输入校验 (二)
2010-10-28 11:01 2394二、 基本输入校验 MVC ...
相关推荐
碳交易机制下考虑需求响应的综合能源系统优化运行模型及有效性分析,碳交易机制下需求响应的综合能源系统优化运行策略探索:低碳减排的实践路径,碳交易机制下考虑需求响应的综合能源系统优化运行 综合能源系统是实现“双碳”目标的有效途径,为进一步挖掘其需求侧可调节潜力对碳减排的作用,提出了一种碳交易机制下考虑需求响应的综合能源系统优化运行模型。 首先,根据负荷响应特性将需求响应分为价格型和替代型 2 类,分别建立了基于价格弹性矩阵的价格型需求响应模型,及考虑用能侧电能和热能相互转的替代型需求响应模型; 其次,采用基准线法为系统无偿分配碳排放配额,并考虑燃气轮机和燃气锅炉的实际碳排放量,构建一种面向综合能源系统的碳交易机制; 最后,以购能成本、碳交易成本及运维成本之和最小为目标函数,建立综合能源系统低碳优化运行模型,并通过 4 类典型场景对所提模型的有效性进行了验证。 通过对需求响应灵敏度、燃气轮机热分配比例和不同碳交易价格下系统的运行状态分析发现,合理分配价格型和替代型需求响应及燃气轮机产热比例有利于提高系统运行经济性,制定合理的碳交易价格可以实现系统经济性和低碳性协同。 关键词: 碳交易机制;
MATLAB演示程序:涡旋拉盖尔-高斯光束的横模特性与拓扑荷数及径向指数的影响分析,涡旋拉盖尔高斯光束MATLAB演示程序,涡旋拉盖尔高斯光束横模MATLAB演示程序 拓扑荷数l : 决定了光束的轨道角动量。 具有不同拓扑荷数的涡旋拉盖尔 - 高斯光束携带不同大小的轨道角动量。 影响光束的相位分布。 当l≠0时,光束具有螺旋相位结构,即相位随着角向坐标以的周期变化。 可以通过光学方法进行调控和测量,在量子信息处理、光学镊子等领域有重要应用。 径向指数p : 表示径向方向上的节点数。 p值越大,光束在径向方向上的能量分布变化越复杂,会出现更多的节点和暗区。 与拓扑荷数一起决定了光束的整体形状和强度分布。 ,涡旋拉盖尔-高斯光束; 拓扑荷数l; 径向指数p; MATLAB演示程序; 螺旋相位结构; 角向坐标变化; 轨道角动量。,MATLAB演示涡旋拉盖尔-高斯光束横模:拓扑荷数与径向指数的影响
PFC5.0算例代码解析:含矿物岩石材料,PFC5.0代码解析:探究由三种矿物构成的岩石与类岩石材料在GBM条件下的单轴压缩2D模拟算例,助力学习与技能提升,PFC5.0代码,含三种矿物组成的岩石或者类岩石材料,GBM,单轴压缩2d,算例代码仅供学习以及提升 ,关键词:PFC5.0代码;三种矿物组成;岩石或类岩石材料;GBM;单轴压缩2d;算例代码;学习;提升; 关键词:PFC5.0; 矿物组成; 岩石/类岩石; GBM; 单轴压缩; 算例学习; 提升;,PFC5.0模拟:含三种矿物岩石材料单轴压缩算例
Matlab三维A*算法详解:Astar三维路径规划及自定义地图、障碍物与代函数设定指南,Matlab三维A星算法路径规划工具箱,matlab三维A*算法 Astar三维路径规划 超详细注释 可自定义地图 自定义障碍物栅格数量和颜色 路径颜色 修改代价函数 预设5种常见评价指标 可 ,matlab; A*算法; 三维路径规划; 详细注释; 自定义地图; 自定义障碍物; 栅格数量和颜色; 路径颜色; 代价函数; 评价指标。,Matlab三维A*算法:超详细注释,自定义地图与障碍物路径规划
win32汇编环境,对话框中使用树形视图示例三
**基于SVPWM与死区补偿的PMSM dq轴电感离线辨识方法:高频注入法与电流极性分析**,SVPWM死区补偿技术下的PMSM电感离线辨识方法研究——基于电流极性与高频注入法的高效识别策略,SVPWM+死区补偿(基于电流极性)+高频注入法辨识PMSM的dq轴电感(离线辨识) 1.模型的中的电机,为采用自建的电机模型 2.适用于spmsm和ipmsm, 3.基于两相静止坐标轴电压注入,可通过设置合理的电压幅值和频率,在静止状态下准确辨识电感(更电机后,由于电机额定电压与转速的不同,可能需要调整原有的高频注入参数以获取满意的辨识效果)(不适用在线辨识) 4.死区补偿,是基于电流矢量极性判断 5.可进行有、无死区补偿下的辨识效果对比(资料中包含多个模型,为笔者当初在有无死区补偿,不同设置条件下的进行参数辨识效果对比,以及模型中包含的一些注释,或可供参考) 6.如果模型运行提示Ts未定义,可在命令行窗口输入Ts=0.0001,以解决该报错 7.模型与参考的期刊lunwen一一对应,可互相印证,其建模方式和思想,适合小白入门学习(不建议初学者无参考lunwen的模型) ,SVPWM; 死区补偿
关于电容电流反馈在有源阻尼谐振抑制及SVPWM策略中的运用及其结合单电流环与中点电位平衡控制的综合研究(参考《某领域文献》《另一些领域的研究》等),电容电流反馈SVPWM控制,电容电流反馈有源阻尼谐振抑制+SVPWM 含: [1]有源阻尼谐振抑制+SVPWM [2]单电流环控制 [3]中点电位平衡控制 提供相关参考文献 ,有源阻尼谐振抑制; SVPPM; 电容电流反馈; 谐振抑制; 中点电位平衡控制; 文献暂无。,电容电流反馈结合SVPWM与有源阻尼谐振抑制的研究与实现
易福门RFID:高效控制标准块,多重调用易管理,轻松修改编号与硬件标识符,RFID控制标准块多重调用便捷设,易福门RFID控制标准块,可以多重调用,只需要更改编号和硬件标识符。 ,易福门RFID;控制标准块;多重调用;编号;硬件标识符,易福门RFID标准控制块:多调高效,只需更改编号和硬件标识
TypeScript 基础语法,本人亲自整理的资料
基于博途西门子PLC的多种液体混合控制系统设计与实现:一份包含全流程的电子程序资料,基于博途西门子PLC的多种液体混合控制系统设计与实现:一份包含全流程的电子程序资料,基于plc多种液体混合控制系统设计 博途 西门子plc 本为电子程序资料 一、包含内容: ①西门子PLC程序+HMI仿真工程 (博途V14或以上) 一份; ②配套有IO点表+PLC接线图+主电路图+控制流程图 (CAD源文件可编辑); ,基于plc多种液体混合控制系统设计; 博途V14; 西门子plc; 混合控制; 控制系统设计; 程序仿真; IO点表; PLC接线图; 主电路图; 控制流程图。,基于博途V14的西门子PLC多种液体混合控制系统设计资料
寻找热泵最佳压力的优化算法 输入Cop和高压值,以找到最大化Cop的最佳高压 Optimization algorithm to find optimal pressure of heat pump Inputs of Cop and high pressure values to find optimal high pressure that maxes out COP
三相变压器空载合闸励磁涌流仿真研究:特点分析与观察,变压器空载合闸:三相励磁涌流仿真研究及特性分析,【1】变压器空载合闸时励磁涌流的仿真 仿真目的:分析三相变压器空载合闸过程中,观察励磁涌流的特点 仿真结果:励磁涌流的特点和分析过程可详细咨询。 ,励磁涌流;变压器空载合闸;仿真目的;分析特点;仿真结果。,变压器空载合闸仿真:励磁涌流分析
孪生模型环境安装及其训练方法
更多毕业设计https://cv2022.blog.csdn.net/article/details/124463185
315MHz与433MHz无线遥控接收解码Keil源程序及AD格式电路图详解,315MHz和433MHz无线遥控接收解码源程序,附带Keil源程序和AD格式电路图,315 433MHZ无线遥控接收解码源程序 Keil源程序 含AD格式电路图 ,315MHz无线遥控接收; 433MHz无线解码源程序; Keil源程序; AD格式电路图,基于Keil的315/433MHz无线遥控解码源程序解析及AD格式电路图详解
MATLAB滚动轴承故障诊断程序:采用西楚凯斯大学数据,基于变分模态分解(VMD)算法与包络谱分析的故障诊断比较实现,MATLAB滚动轴承故障诊断程序:采用西楚凯斯大学数据,基于变分模态分解(VMD)算法与包络谱分析的故障诊断比较实现,MATLAB滚动轴承故障诊断程序:采用西楚凯斯大学数据,首先通过变分模态分解(VMD)算法处理,而后分别通过包络谱分析实现故障诊断 ps.通过尖峰对应的频率与计算出的故障频率比较,实现故障诊断 ,核心关键词:MATLAB; 滚动轴承故障诊断; 西楚凯斯大学数据; 变分模态分解(VMD)算法; 包络谱分析; 故障频率比较。,MATLAB基于VMD算法的滚动轴承故障诊断程序:西楚凯斯大学数据包络谱分析
个人ii c的一个说明的资料
更多毕业设计https://cv2022.blog.csdn.net/article/details/124463185
python语言,窗口形式 单机的形式,CS模式 mysql 1.重点是算法比较 各个算法参数 产生的图和数据足够了 做影评参照 2.自适应svm 既然加了自适应 那它比svm的优势在哪,自适应也是逐步完善的算法 拿新的和旧的比较一下 3.分析结果显示 调图标库即可,条状图 饼状图之类的 不是网站
广西壮族自治区信息中心广西人工智能产业发展白皮书2024年37页.pdf