|
我朋友经常引用我的一句话就是:你的Java对我的Javascript是侵入的....,仿佛她比我还OO来着。
我自己就提出了一个解决的方法:就是把Java对象写成JS对象,这样Web设计人员只要关注JS对象,用JS对象来渲染整个Web页面,这样我就不会和他的领域冲突了。
简单来说,我们平常的WEB框架都是号称MVC的,这样它们就把V这个事情压在了JAVA程序员的身上,可怜我的审美观啊~所以我们应该把V继续往下推,推给对JAVA什么都不懂,但是却有非常丰富的WEB设计人员的身上。总不能让别人去学JAVA呀,那就只好把JAVA对象写成JS对象,这样WEB设计人员就可以轻松调用JS了。
大体实现过程是这样的:
1、双方先讨论项目的需求,然后确定下个个页面需要显示什么内容,怎么显示不管。讨论完后便确定了JS对象和数据库的大体结构。
2、各自写各自的东西...
3、双方写好后把WEB页面通过JS对象和Java连接起来,调试,完工。
具体要害代码:
J2J.java的代码,功能是获取scope范围内,名称为source的java对象,然后把这个java对象写成名称为distName类别为dist的JS对象。
代码:
/* * J2J.java * * Created on 2006年10月2日, 下午7:16 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */
package net.vlinux.tag.j2j; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; import java.lang.reflect.*; import java.util.*;
/** * * @author vlinux */ public class NewObject extends TagSupport { private String dist; private String distName; private String scope; private String source;
private List<Method> getGetMethods( Object aObject ) { Method[] array = aObject.getClass().getMethods(); List<Method> list = new ArrayList<Method>(); for( int i=0;i<array.length;i ){ String methodName = array[i].getName(); if( methodName.matches("get.*") ) list.add(array[i]); } return list; }
private String getFieldName( Method aMethod){ String methodName = aMethod.getName(); String subName = methodName.substring(3,methodName.length()); return subName.toLowerCase(); }
private Object getSourceObject(String scope, String source){ if( scope.equals("request") ){ return pageContext.getRequest().getAttribute(source); }else if( scope.equals("session") ){ return pageContext.getSession().getAttribute(source); }else if( scope.equals("page") ){ return pageContext.getAttribute(source); }else{ System.out.println("xxx"); return null; } }
public int doStartTag(){ JspWriter out = pageContext.getOut(); Object sourceObject = getSourceObject(getScope(),getSource()); List list = getGetMethods( sourceObject ); try{ out.println( "<script>" ); out.println( "\tvar " getDistName() " = new " getDist() "();"); for( int i=0;i<list.size();i ){ try{ String fieldName = getFieldName((Method)list.get(i)); String value = ((Method)list.get(i)).invoke( getSourceObject(getScope(),getSource())).toString(); out.println( "\t" getDistName() "." fieldName " = \"" value "\""); }catch(Exception e){ // } } out.println( "</script>" ); }catch( java.io.IOException ioe){ // } return (EVAL_BODY_INCLUDE); } public int doEndTag(){ return (EVAL_PAGE); }
public String getDist() { return dist; }
public void setDist(String dist) { this.dist = dist; }
public String getDistName() { return distName; }
public void setDistName(String distName) { this.distName = distName; }
public String getScope() { return scope; }
public void setScope(String scope) { this.scope = scope; }
public String getSource() { return source; }
public void setSource(String source) { this.source = source; } } |
标签的tld也一起给出吧,虽然不是要害
代码:
<?xml version="1.0" encoding="UTF-8"?> <taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>J2J</shortname> <uri>/J2J</uri> <tag> <name>newObject</name> <tagclass>net.vlinux.tag.j2j.NewObject</tagclass> <bodycontent>JSP</bodycontent> <info></info> <attribute> <name>distName</name> <required>true</required> </attribute> <attribute> <name>dist</name> <required>true</required> </attribute> <attribute> <name>scope</name> <required>true</required> </attribute> <attribute> <name>source</name> <required>true</required> </attribute> </tag> </taglib>
共2页: 上一页 1 [2] 下一页 |
上一篇:一个基于Java Socket实现文件传输示例 下一篇:高手为你解读J2EE开发过程中的异常处理
![](/images/xg.gif) |
相关文档 |
|
![](/images/xg.gif) |
发表评论 |
|
|
|
|