以前接私活的时候给医院做个网站,搞了个基于Ext的小论坛,但后来感觉这东西比较笨重,灵活性也一般,后来的项目中基本上都选用的JQuery,一用就喜欢上他了,倒没有做广告的意思(其实JQuery框架不用我做广告,Google都用它,呵呵),不过JQuery真是太好用了,而且Plugin也很多,这里给出Ext的代码先,初学的,代码写得很乱,大家凑合着参考吧!
JSP页面代码:
<%@ page contentType="text/html;charset=UTF-8"%> <%@ page import="blogcn.common.StrCharUtil"%> <%@ page import="blogcn.epdsm.common.User"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-Type" content="text/html; charset=utf-8" /> <meta name="keywords" content="" /> <meta name="description" content="" /> <% String cateid=StrCharUtil.formatNullStr(request.getParameter("tid")); User userInfo = (User) request.getSession().getAttribute("user"); %> <script> var GCATEID="<%=cateid%>"; var loginDialog; </script> <title></title> <link rel="stylesheet" type="text/css" href="/hms/resources/css/ext-all.css" /> <link rel="stylesheet" type="text/css" href="/hms/css/post.css" /> <link rel="stylesheet" type="text/css" id="themeCSS" href="/hms/resources/css/xtheme-aero.css" /> <!-- GC --> <!-- LIBS --> <script type="text/javascript" src="/hms/adapter/ext/ext-base.js"></script> <script type="text/javascript" src="fckeditor/fckeditor.js"></script> <script type="text/javascript" src="/hms/adapter/ext/example.js"></script> <!-- ENDLIBS --> <script type="text/javascript" src="/hms/js/ext/ext-all.js"></script> <script type="text/javascript" src="/hms/js/ext/paging.js"></script> <script type="text/javascript" src="/hms/js/ext/bbs.js"></script> <style type="text/css"> html, body { font:normal 12px verdana; margin:0; padding:0; border:0 none; overflow:hidden; height:100%; } #header{ background: url(extimages/header-bar.gif) repeat-x bottom; border-bottom: 1px solid #083772; padding:5px 4px; } #footer{ background: url(extimages/header-bar.gif) repeat-x bottom; border-top: 1px solid #083772; padding:2px 4px; color:white; font:normal 8pt arial,helvetica; } #nav { } #nav, #inner1, #inner2 { padding:10px; } #content p { margin:5px; } #nav li { padding:2px; padding-left:10px; background-image:url(extimages/bullet.gif); background-position: -3px 6px; background-repeat: no-repeat; font-size:8pt; display: block; } .x-layout-panel-north, .x-layout-panel-south, #content .x-layout-panel-center{ border:0px none; } #content .x-layout-panel-south{ border-top:1px solid #aca899; } #content .x-layout-panel-center{ border-bottom:1px solid #aca899; } #loading_container{width:350px;height:135px;margin:0px auto;} #loading_header{width:350px;height:28px;background:url(/hms/extimages/top_title.gif);color:#fff;font-weight:bold;line-height:30px;} #loading_main{border:1px solid #608599;border-top:none;width:348px;height:106px;background:url(/hms/extimages/bg_line.gif);} #loading_gif{float:left;width:39px;height:39px;margin-top:30px!important;margin-top:20px;margin-left:60px!important;margin-left:30px;} .loading_content{float:right;width:150px;height:40px;margin-right:70px!important;margin-right:35px;margin-top:30px!important;margin-top:20px;color:#245B96;line-height:22px;} .loading_content a:link,.loading_content a:visited,.loading_content a:active{ color: #95ADC3;text-decoration: none; } .loading_content a:hover{ color: #95ADC3; text-decoration:underline } </style> <script type="text/javascript"> document.onreadystatechange=function(){ if(document.readyState=="complete"){ document.getElementById("loading").style.display="none"; } } //容器管理 BbsLayout = function(){ return { init : function(){ var layout = new Ext.BorderLayout(document.body, { west: { split:true, initialSize: 200, titlebar: true, collapsible: true, minSize: 100, maxSize: 400 }, center: { autoScroll: false } }); layout.beginUpdate(); layout.add('west', new Ext.ContentPanel('nav', {title: '检验之家栏目', fitToFrame:true, closable:false})); var innerLayout = new Ext.BorderLayout('content', { south: { split:true, initialSize: 200, minSize: 100, maxSize: 400, autoScroll:true, collapsible:true, titlebar: true }, center: { autoScroll:true } }); innerLayout.add('south', new Ext.ContentPanel('inner1', "内容预览")); innerLayout.add('center', new Ext.ContentPanel('inner2')); layout.add('center', new Ext.NestedLayoutPanel(innerLayout)); layout.endUpdate(); } }; }(); Ext.EventManager.onDocumentReady(BbsLayout.init, BbsLayout, true); function initStyle(){ if(/stylesheet=([^;]+)/.test(document.cookie)) { getObject("themeCSS").href=unescape(RegExp.$1); alert(RegExp.$1); } } </script> <script> //菜单管理 Ext.onReady(function(){ var menu = new Ext.menu.Menu({ id: 'mainMenu', items: [ new Ext.menu.CheckItem({ text: '天际蓝', checked: true, group: 'theme', checkHandler: onChangeTheme }), new Ext.menu.CheckItem({ text: 'Vista风格', group: 'theme', checkHandler: onChangeTheme }), new Ext.menu.CheckItem({ text: '银灰主题', group: 'theme', checkHandler: onChangeTheme }) ] }); var tb = new Ext.Toolbar('toolbar',[{text:'发表新帖',type:'button',tooltip: '可以在选定的栏目下发表内容',handler:openBBSDialog}],{menuAlign:'tr-br'}); tb.add({ text:"删除帖子", type:"button", tooltip:"删除选中的帖子", handler:delBBSTopic }); tb.addSeparator(); tb.add({ text:"风格切换", menu: menu }); tb.addSeparator(); var curuserno='<%=userInfo==null?"":("欢迎您:"+userInfo.getUserno())%>'; var btntip=curuserno==""?"重新登录":("重新登录[目前登录用户:"+curuserno+"]"); tb.add({ text:btntip, type:"button", handler:loginBtnHandle }); tb.addSeparator(); tb.add({ text:"<img src='/hms/extimages/warning.gif'><b>点击帖子标题可预览内容,双击帖子可回复该帖子<b>", disabled:true }); function loginBtnHandle() { if(typeof(loginDialog)=="undefined") { loginDialog = new Ext.BasicDialog("login-dlg", { width:290, height:200, autoTabs:false, resizable:false, shadow:false }); var loginIt=function(){ var uname=Ext.get("txtUsername").getValue(false); var upass=Ext.get("txtUserpass").getValue(false); //远程登录 var success = function(o){ try{ var xml = o.responseXML; var msg = xml.getElementsByTagName('msg')[0]; msg=unescape(msg.firstChild.data); if(msg.indexOf("[错误提示]")>=0){ Ext.MessageBox.alert('系统提示', msg); }else{ Ext.MessageBox.alert('系统提示', msg); location.reload(); } }catch(e){ Ext.MessageBox.alert('系统出错提示', "操作不成功,请检查您的网络环境"); } }.createDelegate(this); var failure = function(o){ Ext.MessageBox.alert('系统出错提示', "操作不成功,请检查您的网络环境"); }; Ext.lib.Ajax.request('POST', '/hms/servlet/BbsServlet?act=login', {success:success, failure:failure}, 'u='+uname+'&p='+upass); } loginDialog.addKeyListener(27, loginDialog.hide, loginDialog); postBtn = loginDialog.addButton('登录', loginIt, this); loginDialog.addButton('取消', loginDialog.hide, loginDialog); } loginDialog.show("toolbar"); } function openBBSDialog() { if(BBS.dialog==null) { BBS.init(); } BBS.openDialog(); } function delBBSTopic() { if(G_TOPICGRID.getSelectionModel().getSelected()==null) { Ext.MessageBox.alert('系统出错提示', '请先选中其中一个帖子!'); }else{ var tid=G_TOPICGRID.getSelectionModel().getSelected().get('tid'); var success = function(o){ try{ var xml = o.responseXML; var msg = xml.getElementsByTagName('msg')[0]; msg=unescape(msg.firstChild.data); if(msg.indexOf("[错误提示]")>=0){ Ext.MessageBox.alert('系统出错提示', msg); }else{ G_TOPICGRID.getDataSource().reload(); } }catch(e){ Ext.MessageBox.alert('系统出错提示', "操作不成功,请检查您的网络环境"); } }.createDelegate(this); var failure = function(o){ Ext.MessageBox.alert('系统出错提示', "操作不成功,请检查您的网络环境"); }; Ext.lib.Ajax.request('POST', '/hms/servlet/BbsServlet?act=delbbs', {success:success, failure:failure}, 'tid='+tid); } } function getObject(elementId) { //获取指定id的object if (document.getElementById) { return document.getElementById(elementId); } else if (document.all) { return document.all[elementId]; } else if (document.layers) { return document.layers[elementId]; } } function onChangeTheme(item, checked) { if(checked){ var stylesheet; if(item.text=="Vista风格") stylesheet=getObject("themeCSS").href="/hms/resources/css/xtheme-vista.css"; else if(item.text=="银灰主题") stylesheet=getObject("themeCSS").href="/hms/resources/css/xtheme-gray.css"; else stylesheet=getObject("themeCSS").href="/hms/resources/css/xtheme-aero.css"; document.cookie="stylesheet="+escape(stylesheet); } } }); function clickme(tid) { var success = function(o){ try{ var val = o.responseText; Ext.get("inner1").update(unescape(val)); }catch(e){ Ext.MessageBox.alert('系统出错提示', '数据库查询中遇到问题,请联系管理员!'); } }.createDelegate(this); var failure = function(o){ Ext.MessageBox.alert('系统出错提示', '连接异常或超时,请重试,多次重试不成功,请管理管理员!'); }; Ext.lib.Ajax.request('POST', '/hms/servlet/BbsServlet?act=getbbsdtl&tid='+tid, {success:success, failure:failure}, ''); } </script> </head> <body> <div id="loading" style="width:800px;height:524px; margin-top:180px;"> <div id="loading_container"> <div id="loading_header"> 欢迎进入检验之家 </div> <div id="loading_main"> <div id="loading_gif"> <img src="/hms/extimages/no_2.gif" /> </div> <div class="loading_content"> 正在加载数据,请稍候... </div> </div> </div> </div> <div id ="container"> <div id="nav" class="x-layout-inactive-content" style="line-height:25px;background-image: url(images/bg.gif);background-repeat:repeat-x;"> </div> <div id="content" class="x-layout-inactive-content"> </div> <div id="inner1" class="x-layout-inactive-content"> </div> <div id="inner2" class="x-layout-inactive-content"> <div id="container"> <div id="toolbar"></div> </div> <div style="width:100%" class="x-box"> <div class="x-box-tl"><div class="x-box-tr"><div class="x-box-tc"></div></div></div> <div class="x-box-ml"><div class="x-box-mr"><div class="x-box-mc" style="background-image: url(images/bg.gif);background-repeat:repeat-x;"> <h3 style="margin-bottom:5px;">检验之家</h3> <div id="topic-grid" style="border:1px solid #99bbe8;overflow: hidden; width: 690px; height: 320px;position:relative;left:0;top:0;"> </div> </div></div></div> <div class="x-box-bl"><div class="x-box-br"><div class="x-box-bc"></div></div></div> </div> </div> </div> <!-- bbs dialog --> <div id="bbs-dlg" style="visibility:hidden;"> <div class="x-dlg-hd">发布</div> <div class="x-dlg-bd"> <div class="x-dlg-tab" title="新增帖子"> <div class="inner-tab"> <form action="" method="post" id="bbs-form" onsubmit="return false;"> <input id="act" type="hidden" name="act" value="add" /> <p><label for="url"><small>标题</small></label> <input class="textinput" type="text" name="title" id="title" value="" size="22" tabindex="3" /> </p> <p> <label><small>内容</small></label> <script type="text/javascript"> <!-- var sBasePath = 'fckeditor/'; var oFCKeditor = new FCKeditor('company_notes' ) ; oFCKeditor.BasePath = sBasePath ; oFCKeditor.Value = ''; oFCKeditor.Height = 340 ; oFCKeditor.Width = 760 ; oFCKeditor.ToolbarSet='jianyan'; var init=""; oFCKeditor.Value=init; oFCKeditor.Create() ; //--> </script> </p> </form> </div> </div> </div> <div class="x-dlg-ft"> <div id="dlg-msg"> <span id="post-error" class="posting-msg"><img src="images/warning.gif" width="16" height="16" align="absmiddle" /> <span id="post-error-msg"></span></span> <span id="post-wait" class="posting-msg"><img src="../../images/grid/loading.gif" width="16" height="16" align="absmiddle" /> 发布中...</span> </div> </div> </div> <div id="login-dlg" style="visibility:hidden;"> <div class="x-dlg-hd">用户登录</div> <div class="x-dlg-bd"> <div class="x-dlg-tab" title="Hello World 1"> <div class="inner-tab"> <br/><br/> 用户名: <input type="text" name="txtUsername" id="txtUsername" class="x-form-text"/> <br/><br/><br/> 密 码: <input type="password" name="txtUserpass" id="txtUserpass" class="x-form-text"/> </div> </div> </div> </div> </body> </html> <% if(userInfo==null){ %> <script> Ext.MessageBox.alert('系统出错提示', '很抱歉,您还没有登录不能使用本论坛,页面将自动转到首页!',MyshowResult); function MyshowResult(btn){ location.href="/hms/login.do"; } </script> <%}%>
Ext代码:
/* * Ext JS Library 1.1 * Copyright(c) 2006-2007, Ext JS, LLC. * [email protected] * * http://www.extjs.com/license */ var BBS = function(){ var dialog; var postBtn; var wait, error, errorMsg; var btitle,bcontent; return { init : function(){ wait = Ext.get('post-wait'); error = Ext.get('post-error'); btitle = Ext.get('title'); bcontent = Ext.get('content'); errorMsg = Ext.get('post-error-msg'); this.createDialog(); }, submitBBS : function(){ postBtn.disable(); var bbsSuccess = function(o){ postBtn.enable(); var data = o.responseText; if(data.indexOf("error")>=0) Ext.MessageBox.alert('系统出错提示', '登录超时,请重新登录!', showResult); else { G_TOPICGRID.getDataSource().reload(); dialog.hide(); } //location.reload(); }; var bbsFailure = function(o){ postBtn.enable(); Ext.MessageBox.alert('系统出错提示', '连接异常或超时,请重试,多次重试不成功,请管理管理员!', showResult); }; function showResult(btn){ }; var ttl=btitle.getValue(false); //取得FCKEDITOR内容 var FCK = FCKeditorAPI.GetInstance("company_notes"); var tcont=FCK.GetXHTML(); //var tcont=bcontent.getValue(false); var tact=Ext.get('act').getValue(false); var turi='title='+encodeURIComponent(ttl)+'&content='+encodeURIComponent(tcont)+'&act='+tact+'&cateid='+GCATEID; Ext.lib.Ajax.request('POST', '/hms/servlet/BbsServlet', {success:bbsSuccess, failure:bbsFailure}, turi); }, createDialog: function(){ dialog = new Ext.BasicDialog("bbs-dlg", { autoTabs:true, width:800, height:520, resizable:false, shadow:false }); dialog.addKeyListener(27, dialog.hide, dialog); postBtn = dialog.addButton('确认发表', this.submitBBS, this); dialog.addButton('取消发布', dialog.hide, dialog); dialog.on('hide', function(){ wait.removeClass('active-msg'); error.removeClass('active-msg'); }); }, openDialog:function(){ dialog.show("toolbar"); } }; }(); Ext.EventManager.onDocumentReady(BBS.init,BBS, true);