2009年4月20日星期一

计算机如何区分数据类型?

计算机如何区分数据类型的呢? 比如char类型a 在计算机中是以ascii码来存储的,10进制为97,16进制为61,那么10进制97在计算机中如何存储的呢?我做了个测试
#include "stdafx.h"
#include

int _tmain(int argc, _TCHAR* argv[])
{
char c = 'a';
int i = 97;
printf("%c\n",c);
printf("%d",i);
system("pause");
return 0;
}
设置断点,观察内存
























这个是数字97在内存中的表示 61000000 ,字符a 在内存中的表示是这样的 61cccccccc

2008年11月3日星期一

自定义下拉框初版

下拉框是网页的重要元素,动态取数据并不难,通常的思路是在action中取数据,然后把数据放到request中,最后在页面上用标签遍历数据,但写多了,是不是很烦,我想做一个通用的下拉框标签,只要指明了业务接口,并且该接口实现了特定方法,就可以了。
首先定义一个接口,用来取下拉框的数据。
  1. package com.ssh.tag;

  2. import java.util.List;

  3. /**
  4. * @author 孙程亮 E-mail:sclsch@188.com
  5. * @version 创建时间:Oct 27, 2008 6:59:05 PM
  6. * 取得下拉框数据接口
  7. */
  8. public interface SelectorInterface {
  9. public List getVableValueList();
  10. }
如果哪个业务层service需要增加下拉框的功能,就需要实现它。
例如:
  1. package com.ssh.entity.board.service;

  2. import java.util.ArrayList;
  3. import java.util.List;

  4. import com.ssh.common.vo.ValueLabelBean;
  5. import com.ssh.entity.board.dao.IBoardDao;
  6. import com.ssh.entity.board.model.Board;
  7. import com.ssh.tag.SelectorInterface;
  8. import com.sun.java_cup.internal.internal_error;

  9. /**
  10. * @author 孙程亮 E-mail:sclsch@188.com
  11. * @version 创建时间:Sep 4, 2008 6:36:22 PM
  12. */
  13. public class BoardServiceImpl implements IBoardService,SelectorInterface{
  14. private IBoardDao boardDao;

  15. public void addBoard(Board b) {
  16. boardDao.addBorad(b);
  17. }

  18. public IBoardDao getBoardDao() {
  19. return boardDao;
  20. }

  21. public void setBoardDao(IBoardDao boardDao) {
  22. this.boardDao = boardDao;
  23. }

  24. public List getAllBoards() {
  25. return this.boardDao.getAllBoards();
  26. }
  27. /**
  28. * 用来实现下拉框的方法,
  29. * 把下拉数据存放在ValuLabelBean中,再存放在list中返回
  30. * 给自定义标签。
  31. * @return 下拉数据集合
  32. */
  33. public List getVableValueList() {
  34. List list = this.boardDao.getAllBoards();
  35. List valueLableList = new ArrayList();
  36. for(int i=0;i
  37. Board board = (Board)list.get(i);
  38. ValueLabelBean vlb = new ValueLabelBean();
  39. vlb.setValue(board.getId().toString());
  40. vlb.setLabel(board.getName());
  41. valueLableList.add(vlb);
  42. }
  43. return valueLableList;
  44. }
  45. }
注意数据必须放在ValueLabelBean中,label表示下拉框显示的数据,value表示下拉框的value值,下面是ValueLabelBean
这个bean:
  1. package com.ssh.common.vo;

  2. import java.io.Serializable;

  3. /**
  4. * @author 孙程亮 E-mail:sclsch@188.com
  5. * @version 创建时间:Oct 27, 2008 7:00:36 PM
  6. */
  7. public class ValueLabelBean implements Serializable {
  8. private String value;
  9. private String label;

  10. public String getValue() {
  11. return value;
  12. }

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

  16. public String getLabel() {
  17. return label;
  18. }

  19. public void setLabel(String label) {
  20. this.label = label;
  21. }
  22. }
下面就是写tag了,暂时设置了三个属性 tagId,serviceBean和title,
tagId:select 的 id 属性值。
serviceBean:对应于spring容器中service的id。
title:select的默认选中项。
  1. package com.ssh.tag;

  2. import java.io.IOException;
  3. import java.lang.reflect.Method;
  4. import java.util.List;

  5. import javax.servlet.jsp.JspException;
  6. import javax.servlet.jsp.tagext.TagSupport;

  7. import org.springframework.context.support.AbstractApplicationContext;
  8. import org.springframework.util.StringUtils;
  9. import org.springframework.web.context.WebApplicationContext;
  10. import org.springframework.web.context.support.WebApplicationContextUtils;
  11. import org.springframework.web.util.JavaScriptUtils;
  12. import com.ssh.common.util.*;
  13. import com.ssh.entity.board.service.IBoardService;
  14. import com.sun.org.apache.xml.internal.utils.ObjectPool;
  15. import com.ssh.common.vo.*;
  16. import com.ssh.tag.*;
  17. /**
  18. *
  19. * @author 孙程亮 E-mail:sclsch@188.com
  20. * @version 创建时间:Oct 25, 2008 10:22:18 AM
  21. */
  22. public class SelectorTag extends TagSupport {

  23. private String tagId; //select's id
  24. private String serviceBean;//service
  25. private String title; //select's title

  26. public int doEndTag() throws JspException {
  27. WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(pageContext.getServletContext());
  28. SelectorInterface selectorInterface = (SelectorInterface)applicationContext.getBean(serviceBean);
  29. List list1 = selectorInterface.getVableValueList();
  30. //List list = ServiceLocator.getSelectorService(serviceBean).getVableValueList();
  31. StringBuffer sBuffer = new StringBuffer();
  32. sBuffer.append("
  33. if(!StringUtil.isBlank(title)){
  34. sBuffer.append(""+title+"");
  35. }
  36. for(int i=0;i
  37. ValueLabelBean vlb = (ValueLabelBean)list1.get(i);
  38. sBuffer.append(""+vlb.getLabel()+"");
  39. }
  40. sBuffer.append("");
  41. try {
  42. pageContext.getOut().println(sBuffer.toString());
  43. } catch (IOException e) {
  44. // TODO Auto-generated catch block
  45. e.printStackTrace();
  46. }
  47. return EVAL_PAGE;
  48. }
  49. public void setTagId(String tagId) {
  50. this.tagId = tagId;
  51. }
  52. public void setServiceBean(String serviceBean) {
  53. this.serviceBean = serviceBean;
  54. }
  55. public void setTitle(String title) {
  56. this.title = title;
  57. }
  58. }
在标签中可以用WebApplicationContextUtils来得到context,曾一度起了弯路,想到用一个工具类加载容器,倒也能实现,也想到用反射,但是行不通的。 看来变通一下,可能会少走很多弯路。
下面是tld文件:
  1. xml version="1.0" encoding="UTF-8" ?>

  2. "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
  3. "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

  4. <taglib>

  5. <tlib-version>1.0tlib-version>
  6. <jsp-version>1.0jsp-version>
  7. <short-name>sclschTagshort-name>
  8. <description>sclschTagdescription>

  9. <tag>
  10. <name>selectorTagname>
  11. <tag-class>com.ssh.tag.SelectorTagtag-class>
  12. <body-content>JSPbody-content>
  13. <description>
  14. description>
  15. <attribute>
  16. <name>tagIdname>
  17. <required>truerequired>
  18. <rtexprvalue>truertexprvalue>
  19. attribute>

  20. <attribute>
  21. <name>serviceBeanname>
  22. <required>truerequired>
  23. <rtexprvalue>truertexprvalue>
  24. attribute>
  25. <attribute>
  26. <name>titlename>
  27. <required>falserequired>
  28. <rtexprvalue>truertexprvalue>
  29. attribute>
  30. tag>

  31. taglib>
最后就剩页面了:
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib uri="/WEB-INF/tld/selectorTag.tld" prefix="sclsch"%>

  4. <html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>mytag(sclsch@188.com)title>
  8. head>
  9. <body>
  10. <sclsch:selectorTag tagId='myid' title="--请选择--" serviceBean="boardService" />
  11. body>
  12. html>
好了,尽管这个tag很简陋,但为以后省了不少工,只要在业务层实现一个SelectorInterface接口,在页面上摆个标签就可以了。我刚学标签的编写,有什么不足请指正,如果有更好的设计一定告诉我额。