Struts2开发自定义标签使用后续——自定义下拉菜单

上次采用自定义标签解决了相关编码转化为相对应中文含义的需求,效果还不错,尝到了自定义标签的甜头,准备将一些下拉菜单优化下使用自定义标签来实现。

1、JSP页面:

<%@ taglib prefix="lsxy" uri="/lsxy"%>

<lsxy:Sel name="op2" codeID="CPT20348"  style="width: 180px;" />

 

2、根据页面自定义标签,定义标签结构文件 lsxy.tld 放于WEB-INF下:

<?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>lsxy</short-name>
 <uri>/lsxy</uri>
 <display-name>"lsxy Tags"</display-name>

<!-- 自定义下拉菜单标签 -->
 <tag>
  <name>Sel</name>
  <tag-class>lsxy.report.taglib.LsxySelTag</tag-class>
  <body-content>JSP</body-content>
  <attribute>
   <name>name</name>
   <required>true</required>
   <rtexprvalue>true</rtexprvalue>
  </attribute>
  <attribute>
   <name>codeID</name>
   <required>true</required>
   <rtexprvalue>true</rtexprvalue>
  </attribute>
  <attribute>
   <name>style</name>
   <required>false</required>
   <rtexprvalue>true</rtexprvalue>
  </attribute>
 </tag>
</taglib>

 

3、自定义类 LsxySelTag.java:

package lsxy.report.taglib;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import lsxy.report.service.LsxySelTagService;
import org.apache.struts2.components.Component;
import org.apache.struts2.views.jsp.ComponentTagSupport;
import com.opensymphony.xwork2.util.ValueStack;

public class LsxySelTag extends ComponentTagSupport {

 private static final long serialVersionUID = 1L;
 private String name;
 private String codeID;
 private String style;

 public String getCodeID() {
  return codeID;
 }

 public void setCodeID(String codeID) {
  this.codeID = codeID;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public String getStyle() {
  return style;
 }

 public void setStyle(String style) {
  this.style = style;
 }

 @Override
 public Component getBean(ValueStack valueStack, HttpServletRequest request,
   HttpServletResponse response) {
  return new LsxySelTagService(valueStack);
 }

 @Override
 protected void populateParams() {
  super.populateParams();
  LsxySelTagService service = (LsxySelTagService) getComponent();
  service.setCodeID(getCodeID());
  service.setName(getName());
  service.setStyle(getStyle());
 }

}

 

4、服务处理类LsxySelTagService.java:

package lsxy.report.service;

import java.io.IOException;
import java.io.Writer;
import java.util.Iterator;
import java.util.Map;
import lsxy.report.dao.ReportCodeDao;
import org.apache.struts2.components.Component;
import com.opensymphony.xwork2.util.ValueStack;

public class LsxySelTagService extends Component {
 private static StringBuffer html;
 private String name;
 private String codeID;
 private String style;

 public String getCodeID() {
  return codeID;
 }

 public void setCodeID(String codeID) {
  this.codeID = codeID;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public String getStyle() {
  return style;
 }

 public void setStyle(String style) {
  this.style = style;
 }

 public LsxySelTagService(ValueStack stack) {
  super(stack);
 }

 @Override
 public boolean start(Writer writer) {
  try {
   buildSelectTag();
   // System.out.println("html:" + html.toString());
   writer.write(html.toString());
  } catch (IOException e) {
   e.printStackTrace();
  }
  return super.start(writer);
 }

 /**
  * 构建select
  */
 public void buildSelectTag() {
  html = (new StringBuffer("<select name=\"")).append(name).append("\"")
    .append(" id=\"").append(name).append("\"");
  if (style != null) {
   html.append(" style=\"").append(style).append("\"");
  }
  html.append(">");
  html.append(getOptions());
  html.append("</select>");
 }

 /**
  * 构建option
  *
  * @return
  */
 @SuppressWarnings("unchecked")
 private String getOptions() {
  StringBuffer optionBuffer = new StringBuffer();
  ReportCodeDao dao = new ReportCodeDao();
  Map map = dao.getCodeMap(codeID);
  for (Iterator iterator = map.keySet().iterator(); iterator.hasNext();) {
   String key = (String) iterator.next();
   optionBuffer.append("<option value='").append(key).append("' ");
   optionBuffer.append(" >").append((String) map.get(key)).append(
     "</option>");
  }
  return optionBuffer.toString();
 }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值