dom4J 递归解析

book.xml:
<?xml version="1.0" encoding="UTF-8"?>
<INVENTORY name="INAtrabute">
    
<BOOK name="textBook">
        
<TITLE>
            The Adventures of Huckleberry Finn
            
<FEN>mast
                
<MIAO>
                miao
                
</MIAO>
            
</FEN>
        
</TITLE>
        
<AUTHOR>Mark Twain
            
<FEN>mast1
                
<MIAO>
                miao1
                
</MIAO>
            
</FEN>
        
</AUTHOR>
        
<BINDING>mass market paperback</BINDING>
        
<PAGES>298</PAGES>
    
<price>209yuan</price>
    
</BOOK>
    
<BOOK>
        
<TITLE name="testName">Leaves of Grass</TITLE>
        
<AUTHOR>Walt Whitman</AUTHOR>
        
<BINDING>hardcover</BINDING>
        
<PAGES>462</PAGES>
    
</BOOK>
</INVENTORY>

解析代码:
@Test
    
public void treeWalk() throws DocumentException{
        SAXReader reader 
= new SAXReader(); 
        Document document 
= reader.read(new File("src/book.xml"));
        Element element
= document.getRootElement();
        treeWalk(element);
        
    }

    
public void treeWalk(Element element){
        
for(int i = 0 , size = element.nodeCount();i<size;i++){
            Node node 
= element.node(i);
            
            
if(node instanceof Element){
                treeWalk((Element)node);
                String value 
= node.getName();
                System.out.println(value);
            }
else{
                
            }

        }

    }

posted @ 2012-06-13 14:07 youngturk 阅读(319) | 评论 (0)编辑 收藏

exel拷贝分割符号

行分割:
String[] lines =line.split("\r\n");
列分割:
String[] columns= lines[i].split("\t");

posted @ 2012-06-12 14:45 youngturk 阅读(165) | 评论 (0)编辑 收藏

PowerDesigner 生成数据字典

打开 PowerDesigner 打开一个数据模型 CDM 或 PDM
选择 Report → Reports
点击 New Report 新建一个报告
输入报告名,选择中文,标准报告
这时显示出来的左边是可使用的项目,右边是报告中已经包含的项目,若是只要数据字典,可以只保留 Title-Tables
在网上搜到了一个简单的数据字典模板项目如下:
+ Title-Tables
+--+ Table-表格%ITEM%
+--+--- Table Card-表格%ITEM%的卡片
+--+--- Table Description-表格%ITEM%的说明
+--+--- Table Check Constraint Name-表格%ITEM%的约束名称
+--+--- List of all Dependencies-表格%PARENT%的依赖清单
+--+--- List of Table Columns-表格%PARENT%的列清单
+--+--+ Table Column-表格%PARENT%的列%ITEM%
+--+--+--- Table Columns Card-表格%PARENT%的列%ITEM%的卡片
+--+--+--- Table Columns Description-表格%PARENT%的列%ITEM%的说明
+--+--+--- Table Columns Check Constraint Name-表格%PARENT%的列%ITEM%的约束名称
+--+--+--- List of all Dependencies-列%PARENT%的依赖清单
+--+--- List of Table Keys-表格%PARENT%的键清单
+--+--+ Table Key-表格%PARENT%的键的%ITEM%
+--+--+--- Table Key Card-表格%PARENT%的键%ITEM%的卡片
+--+--+--- Table Key Description-表格%PARENT%的键%ITEM%的说明
+--+--+--- List of Columns of Table Key-键%PARENT%的列清单
+--+--+--- List of all Dependen
在这里编辑好报告的格式后,选择 Report → Generate HTML 或 Generate RTF 生成报告即可

posted @ 2012-06-11 15:07 youngturk 阅读(1873) | 评论 (0)编辑 收藏

Struts2+Freemarker+Ognl中解析request请求的方法

1.首先struts2为我们定义了几个可以在ftl中使用的变量,都放在了org.apache.struts2.views.util.ContextUtil里面,具体怎么做的,还没有看。
  1. public static final String REQUEST = "request";

  2. public static final String REQUEST2 = "request";

  3. public static final String RESPONSE = "response";

  4. public static final String RESPONSE2 = "response";

  5. public static final String SESSION = "session";

  6. public static final String BASE = "base";

  7. public static final String STACK = "stack";

  8. public static final String OGNL = "ognl";

  9. public static final String STRUTS = "struts";

  10. public static final String ACTION = "action";
复制代码
这里定义了我们常用的${base}、${stack}等。
注意:这里面定义都是对应的类。例如stack对应的就是ValueStack,所以我们在页面可以使用
${stack.findValue('@com.Blog@PERMIT_COMMENT_BY_NONE')}.这就是方法问ValueStack的findValue方法。我们还可以使用
${request}来使用HttpServletRequest类,(只能)然后调用里面的方法。例如${request.getAttribute("aaa")}等。

2.通过使用struts2我们知道,页面传递过来的值都是保存在ActionContext中的值栈里面的,其中这个值栈是ActionContext 的根,因此可以不用加“#”访问。而在ActionContext中还封存了其他的东西,比如request,session、parameters 等。。但是一定要注意。这里的request、session、parameters等不是HttpServletRequest那些类,而是一个 map。而且进行了重新组装,例如request封装了 ServletActionContext.getRequest().setAttribute("aaa", "bbb");信息
我们通过Ognl.getValue("#request.aaa", map, context.getValueStack().getRoot())就可以取到值。当然request这个map中还有一些其他的东西,例如我的打印结果是;
System.out.println(Ognl.getValue("#request", context.getContextMap(),new Object()));通过打印可以看出来
这些可以参考
http://hi.baidu.com/maml897/blog/item/e6d962c3d55e6338e5dd3bb0.html。

3.我们知道 ftl页面 ${}写的都是 ognl表达式,而且都是 根里面的 ,所以不用加上“#”,但是 要访问ActionContext里面,不是根的request怎么办呢?
我是这样用的 ${#request}发现时错误的,后来查找资料发现
使用
${Request["a"]}
${RequestParameters["a"]}
${Session ["a"]}
${Application  ["a"]}
或者${Application.myApplicationAttribute}
${Session.mySessionAttribute}
${Request.myRequestAttribute}
${Parameters.myParameter}
千万要注意的是
Application、Session、Request、Parameters都是map。都是大写的,没有写成${#request}这个我也不知道为什么,
在页面 用了大写。
可以参考freemarker.ext.servlet.FreemarkerServlet
在action里使用
System.out.println(Ognl.getValue("#request.aaa", map, context.getValueStack().getRoot()));

刚才发现 在jsp页面里访问 actionContext的内容
${request}
这样写 是访问actionContext的request,而不是 struts2内定的
用struts2标签
<x:property value="#request.toString()"/>
就要加"#"

posted @ 2012-06-08 18:58 youngturk 阅读(1540) | 评论 (0)编辑 收藏

直接访问国际化资源文件内容:

直接访问资源文件内容:
<s:i18n name="cn/itcast/action/PersonManageAction"><!-----红色为报名直接访问-------->
       <s:text name="welcome">
           <s:param>liming</s:param>
           <s:param>study</s:param>
       </s:text>
</s:i18n>

posted @ 2012-06-08 15:21 youngturk 阅读(203) | 评论 (0)编辑 收藏

输出带有占位符的国际化信息getText("welcome",new String[]{"liming","study"})

资源文件中的内容如下:
Welcome
={0},欢迎来到中国{1
1在JSP页面中输出带有占位符的国际化信息
<s:text name=”welcome”>
    
<s:param><s:property  value=”realname”/></s:param>
    
<s:param>学习</s:param>
</s:text>
example:
<s:text name="welcome">
       
<s:param>liming</s:param>
       
<s:param>study</s:param>
   
</s:text> <br>
2
在Action类中获取带占位符的国际化信息,可以使用getText(String key  , String[]args )
或getText(String  aTextName,List args)
example:
ActionContext.getContext().put(
"message"this.getText("welcome",new String[]{"liming","study"}));

posted @ 2012-06-07 23:00 youngturk 阅读(583) | 评论 (0)编辑 收藏

对action指定方法进行校验validateXxx

通过validateXxx方法实现,validateXxx只会校验action方法名为Xxx的方法。其中Xxx的第一个字母要大写,当某个数据校验失败时,我们应该调用addFieldError方法往系统的fieldError添加校验失败信息(为了使用addFieldError方法,继承ActionSupport)如果系统的fieldErrors包含失败信息,struts2将请求自动转发到名为inputresult,在input视图中可以通过<s:fielderror/>显示失败信息。
1,input视图是struts2特定的视图,必须这么写

@Override  需要对这行去掉,@Override表示重载会继承父类的方法
    public void validateUpdate() {
}

posted @ 2012-06-07 15:38 youngturk 阅读(338) | 评论 (0)编辑 收藏

对action所有方法进行输入校验validate()方法

1.需要使用validate方法
validate 方法继承 actionsupport类

2 验证错误结果需要在本类的this.addFieldError(验证参数,传递数据);
this.addFieldError("username""user can not be null");

3.struts.xml中 需要由input是struts2专门验证的参数必须这么写,是内部继承的与
this.addFieldError关联<result name="input">/index.jsp</result>跳转到结果错误提示视图
<action name="manage_*" class="cn.itcast.action.PersonAction" method="{1}">
            
<!-- 错误输出时候会调用系统自带的input视图 -->
            
<result name="input">/index.jsp</result>
            
<result name="message">/WEB-INF/page/message.jsp</result>
            
        
</action>
4验证结果输出jsp页面需要导入
<%@taglib uri="/struts-tags" prefix="s"%>
sturts2标签,
<s:fielderror/>
为输出结果
“user can not be 
null

posted @ 2012-06-07 15:19 youngturk 阅读(284) | 评论 (0)编辑 收藏

拦截器再应用学习

拦截器
如果用户登录后可以访问action中的所有方法
user.jsp{
request.getSession().setAttribute(
"user""itcast");
//专门设置用户是否登录状态,session来专门标注用户是否登录
}
退出登录
quit.jsp{
request.getSession().removeAttribute(
"user");
//将session去掉就行了..
}
如果用户没有登录不允许访问action中的方法,并且提示

1.定义拦截器
1.1实现com.opensymphony.xwork2.ActionInvocation.Interceptor接口
    @Override
    
public void destroy() {//当此类被摧毁的时候执行
        
    }

    @Override
    
public void init() {//实例化自动执行
        
    }
public String intercept(ActionInvocation invocation) throws Exception {
        
// TODO Auto-generated method stub
        Object user = ActionContext.getContext().getSession().get("user");
        
if(user!=null)//判断用户是否登录
            invocation.invoke();//执行被拦截到的方法,不掉用,被拦截的action方法

不会被执行
        ActionContext.getContext().put(
"message""you have not right");
        
return "success";//定义全局
    }//当拦击到action就会执行此方法
1.2注册拦截器 在struts的package中注册拦截器
<package name="employee" namespace="/control/employee" extends="struts-default">
        
<interceptors> <!-- 注册拦截器 -->
            
<interceptor name="permission" 

class="cn.itcast.interceptor.PermissionInterceptor"></interceptor>
            
<!-- 使用拦截器栈可以使用自定义拦截器,且 不失去系统自定义拦截器功能 

-->
            
<interceptor-stack name="permissionStack">
                
<!-- 系统默认拦截器 -->
                
<interceptor-ref name="defaultStack"></interceptor-ref>
                
<!-- 自定义拦截器的引入 -->
                
<interceptor-ref name="permission"></interceptor-ref>
            
</interceptor-stack>
        
</interceptors>
        
<!--默认包里面全用此拦截器  1 与 @@对应-->
        
<default-interceptor-ref name="permissionStack"></default-interceptor-ref>
        
<global-results>
            
<result name="success">/WEB-INF/page/message.jsp</result>
        
</global-results>
        
        
        
<action name="list_*" class="cn.itcast.action.HelloWorldAction" 

method
="{1}">
            
<!-- 使用拦截器 @@ -->
            
<!-- <interceptor-ref name="permissionStack"></interceptor-ref>
            
<interceptor-ref name="增加自定义新拦截器"></interceptor-ref> -->
        
</action>
    
</package>

1.3 需要定义拦截器栈,否则自定义拦截器会覆盖struts自带的拦截器,使struts失去自身的拦截器功能
/control/employee

posted @ 2012-06-07 11:55 youngturk 阅读(166) | 评论 (0)编辑 收藏

1动态方式调用;使用通配符定义action;通过继承DefaultTypeConverter类型;注册为局部类型转换器:

两种方式:
1动态方式调用:在默认值情况excute执行情况下(不建议使用这种方法)
struts中当action为:
        
<action name="helloWord" class="cn.itcast.action.HelloWorldAction" method="execute" 

>
            
<param name="savepath">/department</param>
            
<result name="success">/WEB-INF/page/message.jsp</result>
        
</action>
时候cn.itcast.action.HelloWorldAction中的方法addUI可以这样执行helloWord
!addUI.action这样执行
2.<constant name="struts.enable.DynamicMethodInvocation" value="false" />这个可以禁止使用动态方法
3.使用通配符定义action
<action name="helloWord_*" class="cn.itcast.action.HelloWorldAction" method="{1}" >
            
<param name="savepath">/department</param>
            
<result name="success">/WEB-INF/page/{1}.jsp</result>
        
</action>
1}代表索取到的通配符*
4.以get方法得到参数形式如下:
http:
//localhost:7002/struts2/control/department/helloWordexecute.action?id=123&name=aaa
直接在地址后面付值.
get
*()不管是post还是get方法提交,都能得到值
5,通过过滤器解决中文乱码问题..
6,自定义类型转换
struts 两种转换器:
1)    局部类型转换器:对某个action起作用
2)    全局类型转换器:对所有action中此类型作用
通过继承DefaultTypeConverter类型
代码实现:
public Object convertValue(Map<String, Object> context, Object value,
            Class toType) 
{
//        return super.convertValue(context, value, toType);
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyymmdd");
        
try{
            
if(toType == Date.class){//选择所用类 字符串向date转换
                String[] params = (String[])value;//request.getParameterValues()只能取这个方法取出所有值
                return dateFormat.parse(params[0]);
            }
else if(toType == String.class){
                java.util.Date date 
= (java.util.Date)value;
                
return dateFormat.format(date);
            }

        }
catch(ParseException e){}
        
return null;
    }


}

注册为局部类型转换器:
    在action类所在包下建立ActionClassName
-Conversion.properties文件Conversion固定写法不可改变birthday cn.itcast.type.DateTypeConverter

*************************
request
/session/application的属性添加.
通过acctionContext添加上面三个属性

posted @ 2012-06-05 17:31 youngturk 阅读(294) | 评论 (0)编辑 收藏

仅列出标题
共33页: First 上一页 11 12 13 14 15 16 17 18 19 下一页 Last 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

公告

this year :
1 jQuery
2 freemarker
3 框架结构
4 口语英语

常用链接

留言簿(6)

随笔分类

随笔档案

文章分类

文章档案

相册

EJB学习

Flex学习

learn English

oracle

spring MVC web service

SQL

Struts

生活保健

解析文件

搜索

最新评论

阅读排行榜

评论排行榜