现在网上有一个佛山人的JS验证框架!我仿照着写了一个适合我们现在公司的。。 但郁闷的是 sturts好像不支持自定义属性啊。。那位有什么比较好的解决方案,请赐教。
可以做到的。
1、如果你用struts,建议你去下载struts源代码,针对你要附加的 标签组件,增加相应的属性。
2、也是我建议你的,不要去用struts,可以自己定义标签,增加自己的业务功能、验证功能等等。
我这里有一个权限标记库,里面的架子打好了,如果有兴趣可以给你。
自定义标签是比较麻烦的,修改struts源码是件累活。
[url]http://liu-bia.iteye.com/blog/340261[/url]这里介绍了如果修改struts的源码。
不过,我想你可以变通一下,不要使用非要添加自定义的属性。你可以采用类名来控制。比如
<input type="text" class="no-null reg2 length16 tip3" /
例如这样的一个类名,表示不为空,符合第二个正则表达式(自己写个正则数组),最大长度16,如果出错,显示第三条信息(自定义一个信息数组)
朋友,我有个自己写的例子,你可以参考一下,不清楚PM我好了。
JSP模板文件:
<%@ taglib uri="Self" prefix="s" %>
………
/s:self
………
自定义标签Self类文件代码:
public class SelfDefinationTag extends TagSupport {
………
public int doStartTag() throws JspException {
JspWriter out = pageContext.getOut();
try{
out.println("");
}catch (IOException ioe1){
ioe1.printStackTrace();
}
return EVAL_BODY_INCLUDE ;
}
…………
自定义标签Self模板定义文件(TLD文件):
1.0
1.2
map
<tag>
<name>self</name>
<tag-class>servlet.SelfDefinationTag</tag-class>
<body-content>JSP</body-content>
</tag>
自定义标签Self在web.xml文件中的部署定义:
validateImage
servlet.ValidateImage
<servlet-mapping>
<servlet-name>validateImage</servlet-name>
<url-pattern>/validateImage</url-pattern>
…………
Self
/WEB-INF/tlds/self.tld
使用component标签调用模板文件的JSP:
<%@taglib prefix="s" uri="/struts-tags"%>
template="/components/image.jsp" />
图5.31 自定义图形验证标签范例图
代码解释
(1)在本示例中,随机生成动态数字的图形不是本节重点讲述的要点。因此有关生成动态数字图的servlet,读者可以参看示例代码。这里笔者通过实现Struts2的TagSupport接口定义了一个标签处理类。重写了doStartTag()方法。在该代码中读者也可知道这个自定义的标签只是插入了一段HTML图像代码,其中的validateImage就是笔者写的生成动态数字图的servlet类。在配置文件web.xml中也有该servlet的映射定义。
然后在示例项目的WEB_INF目录下新建了“tlds”目录,在该目录下新建了self.tld文件。定义了self标签。并且也在配置文件web.xml中声明了该标签。
之后又新建了image.jsp文件。引入了self标签的声明。该文件就作为实现图形验证标签的JSP模板文件。在代码中使用self标签定义。
(2)因为Struts2中的component标签是用来方便开发者定义自己开发的标签。因此笔者定义了一个新的JSP文件,在该文件中使用component标签来调用image.jsp这个模板文件。
如代码所示,该标签有三个属性比较重要,而且它们都可以不显式申明。并且由图5.32可知,笔者在这些目录下都存放了image.jsp这个模板文件。因此component标签中template属性就是指定该模板文件所在路径。细心读者可以发现template属性中的模板文件路径不是全路径,前面缺少了模板根目录和主题文件夹名字的定义。这是因为component标签另外两个属性是分别来定义模板根目录和主题文件夹名字的。这两个属性是templateDir属性和theme属性。
其中theme属性就是定义之前所记述的主题。上一小节也提到它可以默认是“xhtml”主题。因此如果它没有显式声明,则表明主题为“xhtml”。则系统调用的模板文件是“xhtml”文件夹下的JSP模板。
同理,templateDir属性是定义模板文件所在的根目录名。如果它不显式声明,则默认为“template”。因此假设templateDir属性和theme属性都不显式声明,则系统调用的模板文件就是/template/xhtml下的模板文件。
注意:component标签内也可以使用param标签。这个标签可以作为很多标签的子标签。前面也有所提及,请读者仔细品味。
(3)本示例调用JSP模板文件的JSP代码中。第一个小例子同时不显式声明templateDir属性和theme属性,则调用的image.jsp文件是/template/xhtml/components/下的那个模板文件。第二个小例子中显式声明theme属性为“ajax”,则它调用的是/template/ajax/components/下的模板文件。第三个例子中theme属性为“ajax”,templateDir属性为“MyTemplate”,则它调用的是/MyTemplate/ajax/components/下的模板文件。
(4)component标签调用的模板文件可以不是JSP文件,它还可以是vm和ftl文件。这两个文件分别是velocity和FreeMarker默认的模板文件后缀名。因此template属性中也可以指定这两种文件类型的模板文件。同理,也可以使用这两种类型文件来调用模板文件,不必要光使用JSP来调用这两种和JSP总共三种文件类型的模板文件。
自己写个类继承struts的标签类,增加自己需要的属性,处理逻辑可以调用基础类原来的处理方法,再扩展点自己需要的功能不就ok了.