论坛首页 Java企业应用论坛

Rose4J WEB引擎下载试用

浏览 2494 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-10-24  

最新内容请参考www.rose4j.cn

        经过几天的整理修正,现在Rose4J的WEB开发引擎终于可以跟大家见面了,前台页面与后台java程序能完全分开,使用两端的工作都变得简单清晰,入门难度几乎为零,附件中是所需要的jar包,请下载试用。

下面我们来看看Rose4J的模板的使用方法:

 一、WEB模板代码;

HTML 代码

 

 

见附件(这里显示不了html代码,郁闷中)
从上面模板可以看出Rose4J只有两个TAG(tempnode、include)和4个属性(foreach、item,tid,remove),它也是一个标记语言,写法如下 ${变量表达式} 。

          其中4个属性可用于html任何标签(如用于tr ,td等),foreach、item配合使用,表示一个循环,foreach="${dataSet}"   ,此时dataSet是一个集合对象或数组,item="${data}" ,data表示集合对象或数组对象中每一个成员。

java 代码
  1. package juan.framework;           
  2.           
  3. import java.util.ArrayList;           
  4. import java.util.List;           
  5.           
  6. public class ValueObject {           
  7.    private int id=0;           
  8.    private String name="tom";           
  9.               
  10.    private List aList=new ArrayList();           
  11.               
  12.    public List getList() {           
  13.       return aList;           
  14.    }           
  15.           
  16.    public void setList(List list) {           
  17.       aList = list;           
  18.    }           
  19.           
  20.    public int getId() {           
  21.       return id;           
  22.    }           
  23.           
  24.    public void setId(int id) {           
  25.       this.id = id;           
  26.    }           
  27.           
  28.    public String getName() {           
  29.       return name;           
  30.    }           
  31.           
  32.    public void setName(String name) {           
  33.       this.name = name;           
  34.    }           
  35. }           
  36.           
  37.           
  38. package juan.framework;           
  39.           
  40. import java.util.ArrayList;           
  41. import java.util.List;           
  42. import java.util.Vector;           
  43.           
  44. import juan.framework.context.IContext;           
  45. import juan.framework.context.impl.InnerContextImpl;           
  46. import juan.framework.runtime.RuntimeSingleton;           
  47.           
  48. public class Test {           
  49.           
  50.    /**        
  51.     * @param args        
  52.     */          
  53.    public static void main(String[] args) throws Exception{           
  54.       String filename = "/xml/hell.html"//要访问的模板path           
  55.       Vector paths = new Vector();           
  56.       paths.add("E:\\workspace\\Test\\juan");  //模板存放的path,可以有多个           
  57.       RuntimeSingleton.init(paths);           
  58.           
  59.           
  60.       IContext context=new InnerContextImpl();           
  61.       context.put("title""www.mobi99.cn");           
  62.                  
  63.       ValueObject vo1=new ValueObject();           
  64.       vo1.setId(9999);           
  65.       vo1.setName("vovovovovov");           
  66.                  
  67.       context.put("data", vo1);            
  68.                  
  69.                  
  70.       List aList=new ArrayList();            
  71.       ValueObject[] xxSet=new ValueObject[2];           
  72.                  
  73.       ValueObject vo=new ValueObject();           
  74.       vo.setId(100);           
  75.       vo.setName("tony");           
  76.                  
  77.                  
  78.       aList.add(vo);           
  79.       xxSet[0]=vo;           
  80.                  
  81.       vo=new ValueObject();           
  82.       vo.setId(200);           
  83.       vo.setName("tom");           
  84.       aList.add(vo);           
  85.       xxSet[1]=vo;           
  86.                  
  87.       context.put("dataSet", aList);           
  88.       context.put("xxSet", xxSet);           
  89.           
  90.       RuntimeSingleton.getTemplate(filename, "GBK").merge(context,null); //此处null为writer,如果是servlet则是response.getOutputStream(),demo中省掉了           
  91.    }           
  92. }           
  93.   
  94. 感兴趣的朋友可以自己稍加修改变成一个web应用,当然也可以等我的web demo   

  • lib.rar (1.6 MB)
  • 下载次数: 40
   发表时间:2007-11-12  
怎么做if的操作呢?

当初在设计view层时,并不想在view层放入太多的逻辑,但对于常规的应用还是有考虑的,roseforj有个remove属性 当它为true时就会保留到页面,为false时则会动态地删除,也就是说在运行时会删除这个节点,而remove可以写死(如:remove=true等),也可以由后台控制(remove=${java表达式}),由此功能实现if操作,这样一来在view层的代码也是最少的,页面也是最干净的


remove用法说明:
假设我们要完成这样一个功能,当变量(int) a>1时我们需要显示<input name="old.id" value="this is old value"/>,当 a<=1时我们需要显示<input name="id" value="this is new value"/>,那么我们就可以这样实现:

1、在java端编写一个功能类

public class XXUtil{
public static boolean isOld(int a){
if(a>1)return true;

return false;
}

public static boolean isNew(int a){
if(a<=1)return true;

return false;
}
}

并将这个类放入context中

然后view层就可以这样描述:
<input name="old.id" value="this is old value" j:remove="${XXUtil.isOld(a)}"/>
<input name="id" value="this is new value" j:remove="${XXUtil.isNew(a)}"/>

这相当于jstl里的
<c:if test="a>1">
<input name="old.id" value="this is old value" j:remove="${XXUtil.isOld(a)}"/>
<c:else>
<input name="id" value="this is new value" j:remove="${XXUtil.isNew(a)}"/>
</c:if>

在运行时其中一个input肯定会被删除掉,这样就完成了if的功能,在这里我只是举例说明,你也可以将这两个(或多个)input合并成一个,需要变化的部分全用变量代替(如下)。这样一来所有的逻辑(包括界面逻辑)全在服务器端实现,界面仍然非常简洁。

<input name="${xxx.name}" value="${xxx.value}" j:remove="${XXUtil.isOld(a)}"/>
此时这一行就代表了多个if else,当然XXUtil这个类的逻辑也要做相应的修改了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics