一、为什么要自定义struts2标签?
答:
struts2接受页面传值,不使用ActionFrom,而是,在Action里使用属性+get/set的方法传值,并且自动实现回写功能。
注意:我们用struts2时提交表单,传值是这么做的:
1》页面:使用struts2的标签<s:>将name设置为与Action的属性名字相同的
2》action写属性(名字与前台页面s标签的name完全相同)+get/set
3》什么也不做自动实现回写功能
那么,我们自己写的struts2标签:
1.标签的name属性和action的属性完全相同+get/set方法
2.这样,就可以自动传值过去了
二、注意:struts自定义的标签实现不了自动回写的功能(目前我的测试来说)
三、如何自定义struts2标签:
1.写tld文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>2.2.3</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>userShow</short-name>
<uri>/show</uri>
<display-name>"user show"</display-name>
<tag>
<name>userShow</name>
<tag-class>cn.vit.auto.proto.utils.UserShowTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>role</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
2.写java实现类:
package cn.vit.auto.proto.utils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.components.Component;
import org.apache.struts2.views.jsp.ComponentTagSupport;
import com.opensymphony.xwork2.util.ValueStack;
/**
*
* @author A
*
*/
public class UserShowTag extends ComponentTagSupport {
private static final long serialVersionUID = 1L;
private String role;
private String name;
@Override
public Component getBean(ValueStack stack, HttpServletRequest request,
HttpServletResponse response) {
return new UserShowHelper(stack, request);
}
protected void populateParams() {
super.populateParams();
UserShowHelper userShow = (UserShowHelper) component;
userShow.setRole(role);
userShow.setName(name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
}
package cn.vit.auto.proto.utils;
import java.io.Writer;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.components.Component;
import org.hibernate.Session;
import cn.vit.auto.proto.entity.User;
import cn.vit.auto.proto.service.UserService;
import com.opensymphony.xwork2.util.ValueStack;
/**
*
* @author Kang_Suwei
*
*/
public class UserShowHelper extends Component {
private static final long serialVersionUID = 1L;
private HttpServletRequest request;
private String role;
private String name;
private UserService userService = new UserService();
public UserShowHelper(ValueStack stack, HttpServletRequest request) {
super(stack);
this.request = request;
}
public UserShowHelper(ValueStack stack) {
super(stack);
}
@Override
public boolean start(Writer writer) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
boolean result = false;
try {
result = super.start(writer);
StringBuilder str = new StringBuilder();
if ("stores".equals(role)) {
List list = userService.listUserByRole(6, session);
str.append("<select name='" + name + "' id='user' >");
str.append("<option value='0'>");
str.append("");
str.append("</option>");
for (int i = 0; i < list.size(); i++) {
User user = (User) list.get(i);
str.append("<option value='" + user.getId() + "'>");
str.append(user.getUserName());
str.append("</option>");
}
str.append("</select>");
writer.write(str.toString());
} else {
List list = userService.listUserByRole(6, session);
str.append("<select name='" + name + "' id='user' >");
str.append("<option value='0'>");
str.append("");
str.append("</option>");
for (int i = 0; i < list.size(); i++) {
User user = (User) list.get(i);
str.append("<option value='" + user.getId() + "'>");
str.append(user.getUserName());
str.append("</option>");
}
str.append("</select>");
writer.write(str.toString());
}
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
}
return result;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3.页面使用
<td><myTag:userShow name="fromUsers[${status.index}]" role="stores" /></td>
4.action
private List<Long> fromUsers;
get/set
分享到:
相关推荐
在Struts2中,自定义标签是扩展其功能和实现个性化界面的重要手段。通过自定义标签,开发者可以构建更加符合业务需求的视图层,提高代码的可读性和可维护性。本文将深入探讨如何在Struts2中自定义标签,并利用栈顶...
在Struts2中,自定义标签是提高代码可读性和可维护性的重要工具。本文将深入探讨Struts2自定义标签的实现机制、优点以及如何在实际项目中进行应用。 一、Struts2自定义标签的概念 自定义标签是JSP的一种扩展,允许...
STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS...
本资源详细介绍了如何在Struts2中自定义分页标签,使得开发过程更加便捷。 在Struts2中,分页通常涉及到以下几个关键步骤: 1. **创建Action类**:首先,你需要创建一个Action类,该类将处理用户的请求,包括获取...
在这个基于Struts2的自定义分页标签的实践中,我们将深入探讨如何创建、配置和使用自定义标签来实现数据的分页展示,同时与Oracle数据库进行交互。 首先,理解分页的基本概念至关重要。分页是将大量数据分成小块,...
自定义标签是Struts2框架中的一个重要特性,它允许开发者创建自己的标签库,以更直观、易读的方式在JSP页面中处理业务逻辑。下面将详细介绍Struts2自定义标签的相关知识点。 首先,理解自定义标签的作用。在传统的...
本教程将详细介绍如何在Struts2中自定义分页标签。 在传统的网页开发中,分页通常通过服务器端脚本或JavaScript实现,但在Struts2框架中,我们可以创建自定义标签来完成这一任务,使得代码更加模块化和易于维护。...
在 Struts 中,自定义标签是提供一种灵活的方式,使得视图层(通常为 JSP 页面)能够更好地与业务逻辑交互,从而提高代码的可读性和可维护性。本文将深入探讨如何在 Struts 中实现自定义标签。 一、自定义标签概述 ...
在Struts2中,自定义标签的实现是提升可重用性和简化视图层代码的一个重要特性。下面我们将深入探讨如何在Struts2中实现自定义标签,以及其背后的原理。 自定义标签的创建主要涉及以下三个步骤: 1. **创建taglib...
在Struts2框架中,标签库是其一大特色,它提供了丰富的自定义标签,使得开发者能够更加便捷地创建动态页面。这些标签极大地简化了JSP页面的编写,提高了代码的可读性和可维护性。 1. **Struts2核心标签库**: - `s...
Struts 是一个强大的Java Web应用程序开发框架,它提供了一套丰富的自定义标签库,使得开发者在构建用户界面时能够更加方便地处理业务逻辑和数据展示。本文将详细讲解Struts中的Bean Tags、HTML Tags和Logic Tags的...
在Struts2框架中,自定义标签是扩展和优化应用功能的重要手段,它允许开发者创建符合业务逻辑且可重用的视图组件。本实例将深入探讨如何在Struts2中实现自定义标签,以及其背后的原理和步骤。 首先,自定义标签在...
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter <filter-name>struts2 <url-pattern>/* ``` 这段代码定义了Struts 2的核心Filter,并将其映射到所有的请求上。 其次...
然而,有时候我们可能需要根据项目需求定制特定的功能,比如这里的"自定义标签代替Struts标签实现分页"。下面将详细阐述这个主题。 一、自定义标签的原理 自定义标签是JavaServer Pages (JSP) 技术的一个强大特性,...
在IT领域,自定义标签是Java Web开发中的一个重要概念,特别是在使用JSP和Struts2框架时。自定义标签能够帮助我们创建可重用、可维护的代码,提高开发效率,使得视图层的逻辑更加清晰。本教程资料集主要探讨了如何...
Struts2 标签使用方法 Struts2 标签库提供了主题、模板支持,极大地简化了视图页面的编写,而且,Struts2 的主题、模板都提供了很好的扩展性。Struts2 允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂...