- 浏览: 125785 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
弦月001:
楼主目前对jcifs还记得吗?我目前在做jcifs sso研究 ...
JCIFS支持多域的SSO -
jusescn:
effort.mjb 写道博主好,请问怎么样才能直接获取到当前 ...
JCIFS支持多域的SSO -
effort.mjb:
博主好,请问怎么样才能直接获取到当前客户端的用户的域信息呢?( ...
JCIFS支持多域的SSO -
jusescn:
yingzhor 写道博主,您好。 如果,我想扩展一下,如果客 ...
JCIFS支持多域的SSO -
yingzhor:
博主,您好。 如果,我想扩展一下,如果客户端不再域内,直接把请 ...
JCIFS支持多域的SSO
简单实现,不用对TMD的一堆的js的api了解,俺还不是js专员,写的太烂,还是java比较贴心啊。
实现流程:页面new Ajax.Request()==》action中获得page对象==》转换为json对象,保存到response中==》在页面中处理返回对象var data = res.responseText.evalJSON();(prototype1.5.1支持)==》调用jstemplate模板引擎对页面进行重组$("output").innerHTML = TrimPath.processDOMTemplate("template_jst", data) ,翻页完成了。
具体代码:
页面请求:
js 代码
- function ajaxpage(pno){
- var url = "${ctx}/admin/usergroup.do?actionMethod=pageAjaxUser";
- var pars = "pageno="+pno;
- var myAjax = new Ajax.Request(url, {method: 'get', parameters: pars, onComplete: showResult});
- }
- function showResult(res){
- var data = res.responseText.evalJSON();
- $("output").innerHTML = TrimPath.processDOMTemplate("template_jst", data);
- }
action:
java 代码
- public ActionForward pageAjaxUser(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- try {
- String pno = request.getParameter("pageno");
- int pageNo = 1;
- if ( pno != null || !"".equals(pno)){
- pageNo = Integer.parseInt(pno);
- }
- Page page = userManager.query(pageNo, 10);
- Object o = page.getResult();
- if ( o != null ){
- List l = (List)o;
- JSONObject json = new JSONObject();
- json.put("users", ToJSONArray(l));
- json.put("page", ToJSONObject(page));
- saveJSON(response, json);
- }
- } catch (Exception e) {
- logger.error("pageAjaxUser", e);
- }
- return null;
- }
其中对持久化对象装化为jsonobject对象,对list转化为jsonarray对象,保存到response中。
持久化对象转化为jsonObject(类似dwr中对dwr.xml定义),对对象中的set/list只进行第一层转化,再转化容易出现死循环(比如user对象含有roles,roles为role对象聚集,对roles循环处理时,role对象含有users聚集....无限死循环)
java 代码
- /**
- * 将实体对象转化为json对象(类似dwr中dwr.xml定义文件),对对象中的set,list,map不做处理,容易产生死循环
- */
- protected JSONObject ToJSONObject(Object obj) throws NoSuchFieldException{
- Field[] fields = obj.getClass().getDeclaredFields();
- JSONObject json = new JSONObject();
- for ( int i = 0 ; i < fields.length ; i++){
- Field field = fields[i];
- Object objValue = com.at21.pm.util.BeanUtils.forceGetProperty(obj, field.getName());
- if ( objValue instanceof Collection ){
- if ( objValue != null && !((Collection)objValue).isEmpty()){
- Collection col = (Collection)objValue;
- JSONArray jsarray = new JSONArray();
- for (Iterator iter = col.iterator(); iter.hasNext();) {
- Object element = iter.next();
- Field[] efields = element.getClass().getDeclaredFields();
- JSONObject jsonobj = new JSONObject();
- for( int j=0;j<efields.length;j++){
- Field efield = efields[j];
- Object evalue = com.at21.pm.util.BeanUtils.forceGetProperty(element, efield.getName());
- if ( !(evalue instanceof Collection || evalue instanceof Map
- || evalue instanceof Object[] || evalue instanceof Clob
- || evalue instanceof Blob )){
- // logger.debug("=====>"+field.getName() + " <> " + efield.getName()+" <> "+ evalue);
- if ( evalue instanceof Date ){
- if ( evalue == null ){
- evalue = "";
- }else{
- SimpleDateFormat formate = new SimpleDateFormat("yyyy-MM-dd");
- evalue = formate.format(evalue);
- }
- }
- jsonobj.put(efield.getName(), evalue);
- }
- }
- jsarray.add(jsonobj);
- }
- json.put(field.getName(), jsarray);
- }
- }else if (!(objValue instanceof Collection || objValue instanceof Map || objValue instanceof Object[]
- || objValue instanceof Clob || objValue instanceof Blob)) {
- //logger.debug("=====>"+field.getName()+" <> "+ objValue);
- if ( objValue instanceof Date ){
- if ( objValue == null ){
- objValue = "";
- }else{
- SimpleDateFormat formate = new SimpleDateFormat("yyyy-MM-dd");
- objValue = formate.format(objValue);
- }
- }
- json.put(field.getName(), objValue);
- }
- }
- return json;
- }
将list转化为jsonarray
java 代码
- /**
- * 将Collection转换为json对象
- */
- protected JSONArray ToJSONArray(Collection c) throws NoSuchFieldException{
- JSONArray jsarray = new JSONArray();
- for (Iterator iter = c.iterator(); iter.hasNext();) {
- Object object = iter.next();
- if (object instanceof Map) {
- Map map = (Map) object;
- JSONObject jsonobj = new JSONObject();
- for (Iterator iterator = map.entrySet().iterator(); iterator.hasNext();) {
- Map.Entry entry = (Map.Entry) iterator.next();
- jsonobj.put(entry.getKey(), entry.getValue());
- }
- jsarray.add(jsonobj);
- }else{
- JSONObject jsobj = ToJSONObject(object);
- jsarray.add(jsobj);
- }
- }
- return jsarray;
- }
最后是保存json对象
java 代码
- /**
- * 保存JSON到respose中
- */
- protected void saveJSON(HttpServletResponse response,JSONObject object){
- logger.debug("JSONObject:"+object);
- response.setContentType("text/html");
- response.setCharacterEncoding("utf-8");
- try {
- PrintWriter pw = response.getWriter();
- pw.print(object);
- pw.flush();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
页面处理返回对象
js 代码
- var data = res.responseText.evalJSON();
- $("output").innerHTML = TrimPath.processDOMTemplate("template_jst", data);
jstemplate脚本模版(需要对jstemplate.js修改下,将标示符号$替换成#,否则与好多东西冲突的不成了,比如说jstl),我将尖括号变成*了
html 代码
- *textarea name="template_jst" id="template_jst" style="display:none;"*
- *table width="90%" border="0" align="center" cellpadding="5" cellspacing="0" class="table6"*
- *tr class="td1" *
- *td**fmt:message key="list.number" /**/td*
- *td**fmt:message key="userReg.usernameCN" /**/td*
- *td*E-mail*/td*
- *td**fmt:message key="userReg.usernameCN" /**/td*
- */tr*
- {var varName = 1}
- {for user in users}
- *tr {if varName%2 == 0} {cdata} class="td1" {/cdata}{/if}*
- *td**input type="checkbox" value="#{user.id}" id="ids" onclick="addUser(this,'#{user.id}','#{user.usernameCN}')"* #{varName++ }*/td*
- *td*#{user.usernameCN}*/td*
- *td*#{user.email}*/td*
- *td*#{user.createdate}*/td*
- */tr*
- {forelse}
- *tr **td colspan="4"*No find*/td**/tr*
- {/for}
- *tr align="center" *
- *td colspan="4"*共#{page.totalCount}条 第#{page.currentPageNo}/#{page.totalPageCount}页
- {if page.hasPreviousPage}*input type="button" value="上一页" onclick="ajaxpage(#{page.currentPageNo-1})"*{/if}
- {if page.hasNextPage}*input type="button" value="下一页" onclick="ajaxpage(#{page.currentPageNo+1})"*{/if}*/td*
- */tr*
- */table*
- */textarea*
评论
11 楼
java.fan
2008-06-26
呵呵
搂住的翻页没有看完,
不过我也又点想法,提出来大家评论.
首先,自定义一个标签,这个标签获取当前页面的 url ,然后修改 url 中的 翻页参数.
提交该url 后,标签又自动生成 最新的 翻页 连接 { 1 2 3 3 4} 这样的 ui
这样一来,页面上 只管 加入 标签,就 ok 了 .都不用去配置,
翻页调用的 方法,在 url 中体现了..翻页的数据,可以在实现类中获得.
搂住的翻页没有看完,
不过我也又点想法,提出来大家评论.
首先,自定义一个标签,这个标签获取当前页面的 url ,然后修改 url 中的 翻页参数.
提交该url 后,标签又自动生成 最新的 翻页 连接 { 1 2 3 3 4} 这样的 ui
这样一来,页面上 只管 加入 标签,就 ok 了 .都不用去配置,
翻页调用的 方法,在 url 中体现了..翻页的数据,可以在实现类中获得.
10 楼
rennuoting
2008-05-16
谢谢你的回复,JSON的类终于可以找到了,还有一些自定义的类没有,主要是com.at21.pm.util.BeanUtils
9 楼
jusescn
2008-05-16
https://sourceforge.net/project/showfiles.php?group_id=171425
8 楼
rennuoting
2008-05-15
这些应该都是JSONObject对象的方法。page对象都是写set,get方法。
可是我在JSON官网下载的代码中,JSONObject和JSONArray都没有这两个方法的,不知你的JSON是哪里下载的。能否共享下源代码呢?
可是我在JSON官网下载的代码中,JSONObject和JSONArray都没有这两个方法的,不知你的JSON是哪里下载的。能否共享下源代码呢?
7 楼
jusescn
2008-05-15
rennuoting 写道
还有就是jsonobj.put(entry.getKey(), entry.getValue());和jsarray.add(jsobj); JSON没有这两个方法啊。
这些应该都是JSONObject对象的方法。page对象都是写set,get方法。
6 楼
rennuoting
2008-05-14
还有就是jsonobj.put(entry.getKey(), entry.getValue());和jsarray.add(jsobj); JSON没有这两个方法啊。
5 楼
rennuoting
2008-05-14
看了你的代码,对实现的过程有了大致的了解,但是分页的时候page是怎么样的呢,有没有完整的代码共享一下啊
4 楼
xly_971223
2007-08-30
jusescn 写道
XStream处理简单对象的还可以,对于多对多,lazy=true的时候,转换对象为json对象时得到的会包含 "@class":"org.hibernate.collection.PersistentSet","initialized":"false" 需要手工对list/set对象Hibernate.initialize.
要采用ajax就不要奢望 opensessioninview 等方法了 所有的数据在返回前都必须准备好
3 楼
jusescn
2007-08-30
XStream处理简单对象的还可以,对于多对多,lazy=true的时候,转换对象为json对象时得到的会包含 "@class":"org.hibernate.collection.PersistentSet","initialized":"false" 需要手工对list/set对象Hibernate.initialize.
2 楼
jusescn
2007-08-30
哈哈,多谢多谢,试试
1 楼
xly_971223
2007-08-30
将page对象转换成json可以用xstream
jstemplate好像是个好东东 可以省去好的js dhtml操作
page = productManager.findProduct(getPageno()); XStream xstream = new XStream(new JettisonMappedXmlDriver()); xstream.alias("product", Product.class); xstream.alias("page", Page.class); log.info(xstream.toXML(page));
jstemplate好像是个好东东 可以省去好的js dhtml操作
发表评论
-
msxml3.dll 错误 '800c0008' 指定资源下载失败
2009-12-15 09:37 4294在个别机器有出现,表 ... -
frame内嵌ExtJS、PrototypeJS、Mootools通用AJAX框架内存溢出问题解决
2009-08-12 13:27 2250表现:在弹出页面中嵌入另外页面(iframe/frameset ... -
50个实用的JavaScript工具
2009-02-23 09:50 1626http://www.iteye.com/news/5846- ... -
javascipt的AOP
2009-01-04 10:54 1219很多实现了,基于jquery和prototype的都有。 ht ... -
13个在线web2.0风格生成器
2008-12-29 11:39 1030现在,只要看一些web2.0应用的目录,你就会发现,无论是小网 ... -
Checkbox的checked属性问题
2008-12-26 11:00 5119http://www.cnblogs.com/net205/a ... -
使用CheckBox的indeterminate属性的问题
2008-12-26 10:58 2220http://blog.csdn.net/yangdengfe ... -
javascript中的this与call/apply的应用
2008-12-25 10:29 1014call/apply方法作用是将 某对象的某个方法置于某种环境 ... -
如何直接调试线上页面的JavaScript和CSS
2008-09-10 12:43 1709http://lifesinger.org/blog/?p=4 ... -
Ext JS与企业软件界面设计
2008-09-03 14:32 1365http://hoou02.blog.163.com/blo ... -
Jsonp 方式跨域获取 json 数据原理
2008-06-18 09:34 2551http://galaxystar.iteye.com/blo ... -
Unicode编码转换
2008-05-29 19:46 1456web开发时,通过XMLHttp请求访问数据,对中文经常出现乱 ... -
escape,encodeURI,encodeURIComponent 比较
2008-04-22 17:50 994js对文字进行编码涉及3个函数:escape,encodeUR ... -
[ext2.0d5]刚从ext.js上下载的ext2.0d5,呵呵,尝鲜罗。
2007-09-07 15:36 3698写程序下的,关键url:http://extjs.com/pl ...
相关推荐
这个压缩包中的资源,"SSH+jQuery+json 实现的Ajax操作,绝对精华,代码简练清晰,绝对能看明白",显然提供了一个使用这些技术实现Ajax级联操作的实例。下面将详细介绍这些技术及其在Ajax操作中的应用。 **SSH ...
综上所述,SSH2+Ajax+jQuery+JSON的登陆验证实现了对用户名的有效性检查,并通过异步的方式提高了用户体验。这种技术组合在现代Web开发中非常常见,特别是在构建交互性强、响应迅速的应用程序时尤为适用。
基于SSH2+Maven+EasyUI+MySQL技术实战开发易买网电子商务交易平台4
SSH整合指的是Spring、Struts和Hibernate这三大框架的集成应用,它们是...这些文件共同构成了一个完整的SSH+JSON+Jquery+Ajax的示例应用,展示了如何在实际开发中有效地组合使用这些技术,以实现高效、互动的Web应用。
SSH2+JSON+Ajax+jQuery是一个常见的Web开发技术组合,常用于构建动态、交互性强的Web应用程序。这个项目源码提供了使用这些技术的实际应用案例,方便开发者学习和参考。以下是这些技术的详细介绍: **SSH2 (Spring ...
在描述中,SSH框架结合JSON+AJAX,意味着应用利用了AJAX的异步特性,通过JSON格式与服务器进行数据交互,提供更流畅的用户体验。 SSH框架与AJAX结合,使得前端可以通过AJAX请求向后端发送数据,后端处理后再以JSON...
在这个过程中,SSH2代表Secure Shell 2,通常用于服务器端的安全管理,如远程登录、文件传输等。而AJAX(Asynchronous JavaScript and XML)是网页开发中用于创建动态交互用户体验的技术,通过在后台与服务器交换...
基于SSH2+Maven+EasyUI+MySQL技术实战开发易买网电子商务交易平台2
在标题“json+ssh+ajax”中,我们可以推测这是一个结合了这三种技术的项目。可能的情况是,这个项目使用SSH连接到远程服务器,然后使用AJAX技术来实现在用户界面中的实时数据更新,而这些数据可能是通过JSON格式交换...
1.1、课程的背景 ... 亮点四、整个课程虽项目不大,但整个项目基本上涉及到JEasyui与后台交互的方方面面,而且讲师框架全部按大的项目架构去搭建的,学员拿到该项目后稍加改造就可以用到自己的项目,实用性超强.
Eclipse 搭建 SSH 架构(Struts + Spring + Hibernate) Eclipse 是一个功能强大且功能丰富的集成开发环境(IDE), SSH 架构(Struts + Spring + Hibernate)是 Java Web 开发中常用的架构模式。下面将详细介绍...
本项目是一款基于SSH架构的学生档案管理系统,采用Java、JavaScript和CSS进行开发。系统源码包含299个文件,其中包括66个PNG图片、58个Java类、58个JSP页面、31个JAR包、24个XML配置文件、14个JSP页面、9个...
在SSH+ztree+ajax+json项目中,Ajax可能被用于异步地从服务器获取数据(例如JSON格式),然后动态地更新ZTree的节点,提供更流畅的用户体验。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于...
基于SSH架构的培训机构教务系统源码+项目说明.zip基于SSH架构的培训机构教务系统源码+项目说明.zip基于SSH架构的培训机构教务系统源码+项目说明.zip基于SSH架构的培训机构教务系统源码+项目说明.zip基于SSH架构的...
在SSH2(Apache Struts2)、Ajax、jQuery和JSON技术组合中,验证用户名是否存在的功能是一个典型的前后端交互示例。以下是这些技术如何协同工作的详细解释: **SSH2 (Struts2)**:SSH2是Struts2的简称,它是Apache的...
在本文中,我们将探讨如何使用SSH1框架与jQuery的AJAX功能来处理JSON二维数组,特别是在实现菜单联动下拉框的场景中。SSH1(Spring、Struts、Hibernate)是Java开发中的一个流行MVC框架组合,而jQuery的AJAX功能则...
一个结合了ssh2+json+ajax的小例子,显示用户列表 开发环境:Myeclipse8.5+Mysql 内涵sql文件,ssh2部分是Myeclipse自动生成的,如果用eclipse的话需要导入jar包,内带jdbc和json部分的jar包。
标题中的"SSH所有jar+jbpm+json+extjs"提到了几个关键的软件开发组件,这些组件在Java Web开发中扮演着重要角色。SSH是一个常见的缩写,它代表Spring、Struts和Hibernate三个框架,它们是Java企业级应用开发的基石。...
在IT行业中,构建高效、动态的Web应用是关键任务之一,而"ajax+jQuery+ssh+oracle级联实例"提供了一个具体的实现方案。这个实例涵盖了前端到后端的关键技术,包括异步数据交互(Ajax)、JavaScript库(jQuery)、...