`

基于Struts2的自定义标签编辑

阅读更多
1,建立Tag文件,该文件继承于struts2的基本标签组件,如果查看struts2源码,可以看到该类继承了BodyTagSupport,即是一个标准的JSP标签

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import net.esj.struts.components.TextWrap; 

import org.apache.struts2.components.Component; 
import org.apache.struts2.components.Property; 
import org.apache.struts2.views.annotations.StrutsTag; 
import org.apache.struts2.views.jsp.ComponentTagSupport; 

import com.opensymphony.xwork2.util.ValueStack; 

public class TextWrapTag extends ComponentTagSupport { 

private String value; 

@Override 
public Component getBean(ValueStack stack, HttpServletRequest req, 
HttpServletResponse res) { 
return new TextWrap(stack); 
} 

protected void populateParams() { 
        super.populateParams(); 
        TextWrap tag = (TextWrap) component; 
        tag.setValue(value); 
    } 

public void setValue(String value) { 
this.value = value; 
} 

} 



2,建立解析文件
import java.io.IOException; 
import java.io.Writer; 

import net.esj.basic.utils.view.HtmlUtils; 

import org.apache.log4j.Logger; 
import org.apache.struts2.components.Component; 
import org.apache.struts2.views.annotations.StrutsTag; 
import org.apache.struts2.views.annotations.StrutsTagAttribute; 

import com.opensymphony.xwork2.util.ValueStack; 

@StrutsTag(name="textwrap", tldBodyContent="empty", tldTagClass="net.esj.struts.views.jsp.TextWrapTag", 
    description="Print out expression with word-wrapped") 
public class TextWrap extends Component { 

protected static final Logger logger = Logger.getLogger(TextWrap.class); 

private String value; 

public TextWrap(ValueStack stack) { 
super(stack); 
} 
//获得标签传递的值 如此处:传递的值为key(注意不是key的内容) 
    @StrutsTagAttribute(description="Value to be displayed", type="Object", defaultValue="<top of stack>") 
    public void setValue(String value) { 
        this.value = value; 
    } 

public boolean start(Writer writer) { 
        boolean result = super.start(writer); 

        String actualValue = null; 

        if (value == null) { 
            value = "top"; 
        } 
        else { 
        value = stripExpressionIfAltSyntax(value); 
        } 

//获得该键值对应的内容 
        actualValue = (String) getStack().findValue(value, String.class, throwExceptionOnELFailure); 

//处理该内容并写到writer中 
        try { 
            if (actualValue != null) { 
                writer.write(prepare(actualValue)); 
            } 
        } catch (IOException e) { 
        logger.info("Could not print out value '" + value + "'", e); 
        } 

        return result; 
    } 

private String prepare(String actvalue){ 
String result = HtmlUtils.formateTextarea(actvalue); 
return result; 
} 
} 


3.在WEB-INF下建立tld文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
  <description><![CDATA["To make it easier to access dynamic data;
                        the Apache Struts framework includes a library of custom tags.
                        The tags interact with the framework's validation and internationalization features;
                        to ensure that input is correct and output is localized.
                        The Struts Tags can be used with JSP FreeMarker or Velocity."]]></description>
  <display-name>"Melon Tags"</display-name>
  <tlib-version>2.0</tlib-version>
  <short-name>m</short-name>
  <uri>/melon-tags</uri>
 
  <!--自定义测试 -->
  <tag>
    <description><![CDATA[Execute an action from within a view]]></description>
    <name>textwrap</name>
    <tag-class>net.esj.struts.views.jsp.TextWrapTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
      <description><![CDATA[Value to be displayed]]></description>
      <name>value</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <dynamic-attributes>false</dynamic-attributes>
  </tag>
</taglib>

在使用struts的框架中这样添加自定义标签就几乎不用去了解jsp的标签定义了,什么pagecontext多麻烦

分享到:
评论

相关推荐

    struts2相关标签描述

    - 标签通常以`s:`开头,如`s:property`,表示它是Struts2的自定义标签。 - 标签可以具有属性,例如`s:textfield`的`name`属性指定字段名称,`value`属性指定默认值。 - 标签可以嵌套,例如在`s:form`中嵌套`s:...

    基于Struts 2实现的博客网站

    基于Struts 2实现的博客网站是典型的Web应用程序,它展示了如何利用Struts 2的核心特性来处理用户请求、管理业务逻辑以及呈现视图。 一、Struts 2框架核心概念与特性 1. **Action**:Struts 2中的Action类是业务...

    基于struts2框架商品版本管理系统

    在这个"基于Struts2框架的商品版本管理系统"中,我们可以看到如何利用Struts2的核心功能来实现对不同类型商品信息的有效管理。 首先,系统的核心是控制器层,Struts2通过Action类实现这一层。每个Action类对应一个...

    基于struts的文章管理系统

    Struts框架提供了标签库(Tag Library),如`displaytag`或自定义的Struts2标签,可以帮助开发者更方便地创建动态网页。例如,可以使用`&lt;s:form&gt;`标签创建表单,`&lt;s:textfield&gt;`输入框显示和编辑文章内容,`...

    基于Struts2+Mysql排课系统

    此外,Struts2还支持拦截器、自定义标签、结果类型等特性,便于实现复杂的业务流程和用户交互。 接着,Mysql作为数据库管理系统,是存储和管理排课系统数据的关键组件。Mysql以其高性能、高可靠性以及易于管理和...

    Struts2 code jar+实现struts2步骤文档

    - 使用JSP或FreeMarker模板文件创建视图,使用Struts2标签库(例如`s:property`,`s:form`等)与Action进行交互。 5) **拦截器**: - 自定义或使用内置的拦截器,如Params拦截器处理参数,Validation拦截器进行...

    struts中ec标签的使用

    EC标签库是由Apache Struts社区开发的,旨在简化Web应用的前端开发,尤其是对于那些基于Struts 1.x的应用程序。它们为开发者提供了大量的预定义UI组件,如表格、下拉框、树形结构、分页等,这些组件不仅易于使用,还...

    kindEditor编辑器与struts2整合的源文件

    2. **配置Action**:在Struts2的配置文件(struts.xml)中,定义一个Action,用于接收编辑器提交的数据。这个Action通常会有一个String类型的参数,用于接收HTML内容。 3. **创建JSP页面**:在JSP页面中,创建一个...

    Struts2项目案例

    Struts2是一个强大的Java web应用程序框架,它基于MVC(Model-View-Controller)设计模式,主要用于构建可维护性高、结构清晰的企业级应用。在这个"Struts2项目案例"中,我们可以通过学习和实践来深入理解Struts2...

    struts-2.5.22-all.zip

    这些库文件对于开发基于Struts2的应用程序至关重要,它们提供了框架的扩展性和灵活性,允许开发者根据需求选择使用。 `struts-2.5.22-all`这个压缩包名称暗示了它包含了Struts2框架的所有组成部分,可能包括: 1. ...

    struts 2 源码 导入eclipse工程

    Struts 2是一个基于MVC(Model-View-Controller)设计模式的开源Java Web框架,由Apache软件基金会维护。它提供了强大的控制层,使得开发者能够更有效地构建动态、数据驱动的Web应用程序。Eclipse是一款广泛使用的...

    umeditor struts2整合

    你需要指定编辑器容器的ID以及服务器端处理上传的URL,这可以通过Struts2的`&lt;s:url&gt;`标签来实现。 5. **处理上传请求**:在后台,你需要处理UMEditor发送的文件上传请求。Struts2的Interceptor可以用来拦截这些请求...

    基于struts的图书管理系统

    基于Struts的系统可能采用Spring Security或者自定义拦截器来实现权限控制,确保只有授权用户才能访问特定的功能模块。同时,考虑到数据的一致性,事务管理也是必不可少的,可能通过Hibernate或JDBC进行实现。 在...

    用于dreamweaver的标签提示和格式化.JSTL的c,fmt,x和struts2

    1. `TagLibraries.vtm`:这可能是一个Dreamweaver的自定义标签库文件,包含了对JSTL和Struts2标签的定义,使得在编辑JSP页面时能提供智能提示。 2. `Flash_Components`:可能包含了与Flash相关的组件或资源,虽然与...

    struts2、smalledit图片上传编辑器

    在Struts2框架中集成Smalledit图片上传编辑器,首先需要在项目中引入相关的库文件,包括Struts2的核心库、Smalledit的JavaScript文件以及可能需要的图片上传处理库。接着,我们需要配置Struts2的Action类,该类将...

    Struts1及14. Struts2学习笔记

    在Struts2的学习笔记中,`note.jsp`可能同样用于显示和编辑笔记,但使用的是Struts2的标签库,如`&lt;s:property&gt;`来显示模型对象的属性,以及`s:form`标签创建表单。Struts2允许直接在JSP页面中使用Action的属性,无需...

    struts2写的简单相册管理

    1. **Struts2框架**:Struts2是基于Apache Jakarta Struts 1的下一代框架,它提供了更灵活的控制层,支持多种视图技术如JSP、FreeMarker、Velocity等。Struts2的核心是Action类,它负责处理用户的请求,并通过Result...

    Using Struts 2 - AppFuse 2 - Confluence(1).pdf

    Struts 2(前身为WebWork)是一款以简洁为设计理念的Web框架,它基于XWork构建,XWork是一个通用的命令模式框架。尽管XWork拥有自己的依赖注入(IoC)容器,但其功能并不如Spring全面,在本教程中我们不会深入探讨...

    struts2image kindeditor

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它提供了丰富的功能,如拦截器、结果类型、动态方法调用等,使开发者能够更高效地构建可维护的Web应用程序。Struts2Image可能包含对图像上传...

Global site tag (gtag.js) - Google Analytics