论坛首页 Web前端技术论坛

关于 server javascript

浏览 4836 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-08-03  
用ruby on rails写过一些东西。欧洲人好象很喜欢的样子。如果是一些简单的WEB应用,觉得还是很有优势的。但对于复杂的商业应用,有很多流程或分布计算方面的。我看 ruby 还是先向边上站吧

根据ruby 的一些灵感吧。基于javascript 写了一个这样子的开发框架。请大家给点评论,看看有没有继续的可能。

/**
 *  index  该文件的默认函数
 *  如访问 http://host:port/content/vega/{fileprefix}
 *  默认执行 index 函数
 *  如访问 http://host:port/content/vega/{fileprefix}/{somefunction}
 *  则执行相应的 somefunction :{e.g http://localhost:8080/bbs/demo/insert 则执行 demo.js 文件中的 insert 函数}
 *  
 */
/*
 * 查询该表下的指定字段为 account.find(["c1","c2","c3"]);; 参数为 Array 包涵列数组
 * 根据条件查询 : account.find(["c1","c2","c3"], clause);; 参数1指定列,参数2为Clause对象
 * 翻页查询: account.find(["c1","c2","c3"], clause, page);; 参数1指定列,参数2为Clause对象 参数3为Page对象
 * 
*/
function index();{
	require("/DataSource.js");;//引入数据库访问类
	vega.log.info(vega.request.id);
	var account = new Table('account', vega.getComponent("bbs"););;//初始化数据库表对象,参数1为 数据库表名,参数2为 DataSource
	var result = account.find();;//得到当前表对象中的所有字段的所有数据
	vega.saveValue({result:result});;//保存结查 转发到默认的view 层 /view/ajax/index.vm 中 如果想改变其显示的view层 : vega.sendPage("/aaa/view.vm",{result:result});;
}

function findColumn();{
	require("/DataSource.js");;//引入数据库访问类
	var account = new Table('account', vega.getComponent("bbs"););;//初始化数据库表对象,参数1为 数据库表名,参数2为 DataSource
	var result = account.find(["userid","firstname","lastname"]);;
	vega.saveValue({result:result});;
}
   发表时间:2006-08-03  
这是javascript吧。
0 请登录后投票
   发表时间:2006-08-03  
不好意思。我以为被删除了。

多谢管理员

是用js的语法来完成后台的业务逻辑

因为现在AJAX应用很广,javascript现在也被很多人接受

我的目的是想 client js<==(request response)==>server js
0 请登录后投票
   发表时间:2006-08-03  
如果抛弃了DAO层,java一样可以阿。不就是  充血PO吗。
偶这几天也看ROR的东西。

用中庸这个词很是贴切。
要简单,就要舍弃一些东西。
但脚本语言带来的好处不是java.c#可以解决的。
0 请登录后投票
   发表时间:2006-08-03  
http://rubytao.com/news/replicant-0-2-released/
0 请登录后投票
   发表时间:2006-08-04  
介绍下我们的框架吧。我们的mvc框架式自己开发的,充分利用js脚本功能,并辅以java的反射机制,做到了浏览器和web服务器自动交换实体的功能。感兴趣的话,看下面的代码:


window.onload = function();{
	...
	var grid = new SigmaList();;
	document.all.userList.appendChild(grid.getElement(););;
	var columns = [
		{name:"name",caption:"姓名",mode:"string",width:100},
		{name:"loginName",caption:"登录名",mode:"string",width:120},
		{name:"age",caption:"年龄",mode:"number",width:40,format:"#"}
	];
	
	grid.setContext({
		sequence:true,checkBox:true,readonly:true
	});;
	grid.bindHeader(columns);;   //把表格列和实体属性名邦定
	grid.bindData([]);;
	
	listUsers();;
}

function listUsers();{
	var url = "user!getUsers.action";
	var request = new AjaxRequest("post",url,true);;
	request.onresult = function();{
		var r = request.getValue();;
		grid.bindData(r.users);;   //绑定实体(由框架自动把java实体序列化到js实体了);集合
	}
	request.send();;
}



action中的代码:
public String getUsers();{
	List list  = Global.getUserService();.getAll();;
	this.result.put("users",list);;
	return null; 
}


程序员可以不必编写任何从java实体到js实体转换的代码。框架自动完成了。以上代码展示了从服务器端获取实体并展示出来的过程。我们再看一段从浏览器提交,直到服务器端获取实体的过程。

客户端代码:
var sform = null;
window.onload = function();{
	sform = new SigmaForm();;
	sform.bindFormById("userForm");;		/*用自定义的SigmaForm包装浏览器的Form对象。SigmaForm除了自动设置获取对象属性外,还可以根据属性类型提供编辑器*/
}

function saveUser();{
	var user = sform.getValue();;		/*用SigmaForm对象获得js形式的实体,用字符串来表达这个实体可能是这个样子的:
	{name:"xxxx",age:22,loginName:"yyyyy"}
	*/
	var r = new AjaxRequest("post","user!save.action",true);;
	r.setParameter("user",toString(user););;   //把实体变成字符串作为ajax请求的参数。
	r.onresult = function();{
		var result = r.getValue();;
		if(result.exception!=null);{
			alert(result.exception);;
		}else{
			window.returnValue = "relist";
			window.close();;
		}
	}
	r.send(null);;
}



服务器端代码:
public String save();{
	User user = (User); this.parameters.getValue("user",User.class);;	//获得java形式的实体
	if(user.getId();==null);
		Global.getUserService();.create(user);;
	else
		Global.getUserService();.update(user);;
	return null;
}


不知道这样的ajax框架能否满足部分jers的期望呢?
0 请登录后投票
   发表时间:2006-08-04  
qiaolu 写道
不好意思。我以为被删除了。

多谢管理员

是用js的语法来完成后台的业务逻辑

因为现在AJAX应用很广,javascript现在也被很多人接受

我的目的是想 client js<==(request response)==>server js


这样的开发框架已经有了 可以参考cocoon
0 请登录后投票
   发表时间:2006-08-04  
我只所以弄个个较为简单的小框架,主要是受了rails 的影响,

webapp/controllers/这里有不同的js 一个js为一个 controller 每一个function 处理一个请求
webapp/views/{controller name}/这里是velocity vm

开发者只需要 开发不同的function , 和views跟function名子对应的.vm就行了
0 请登录后投票
论坛首页 Web前端技术版

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