实习日志(6):Flex显示Servlet所传值
解决了跳转问题之后,什么板报发布之类的就不在话下了,但是在实现了板报发布之后,我发现了一个问题—— 之前在Servlet+JSP开发时,Servlet返回给JSP一个ArrayList,JSP对其进行循环读取。在Flex这儿,Servlet应该返回什么类型的值给Flex供其显示呢??? 受到Flex官方教学视频的启发,决定利用XML来完成Servlet对JSP的传值。 ? 官方视频案例: 使用HTTPService从URL检索XML数据 添加url属性指向远程XML文件(http://adobetes.com/f4iaw100/remoteData/employees.xml) ? 实现思路:servlet调用dao将请求的内容生成XML,Flex读取XML内容,将其显示在datagrid控件上。 MXML代码: <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" borderStyle="none" fontWeight="bold" fontSize="15" alpha="1.0" borderColor="#FEFFFF" backgroundGradientAlphas="[1.0,1.0]" backgroundGradientColors="[#FFFBFB,#FFFBFB]" creationComplete="InitApp()"> <!--发布板报--> <mx:HTTPService id="addContent" url="http://localhost:8080/BlackBoardV1.4/ContentServlet" useProxy="false" method="post" result="resultHandler(event)"> <mx:request> <flag>{"add"}</flag> <title>{title.text}</title> <content>{content.text}</content> <start>{start.text}</start> <finish>{finish.text}</finish> </mx:request> </mx:HTTPService> <!--浏览板报--> <mx:HTTPService id="lookContent" url="http://localhost:8080/BlackBoardV1.4/ContentServlet" useProxy="false" method="post"> <mx:request> <flag>{"look"}</flag> </mx:request> </mx:HTTPService> <mx:Script> <![CDATA[ import mx.collections.ArrayCollection; import mx.controls.Alert; import mx.events.IndexChangedEvent; public function add(event:Event):void{ addContent.send(); } public function resetForm():void{ title.text=""; content.text=""; start.text=""; finish.text=""; } public function resultHandler(event:Event):void{ if(addContent.lastResult.toString()=="true") { viewstack1.selectedIndex=1; }else { viewstack1.selectedIndex=2; } } private function InitApp():void { tab.addEventListener(IndexChangedEvent.CHANGE,indexChangeHandler); } public function indexChangeHandler(event:IndexChangedEvent):void { if(tab.selectedIndex==1) { //初始化拿到的数组,显示在数据框中 lookContent.send(); }else if(tab.selectedIndex==0) { viewstack1.selectedIndex=0; } } ]]> </mx:Script> <mx:TabNavigator width="100%" height="417" id="tab"> <mx:ViewStack label="发布板报" id="viewstack1" width="100%" height="100%" horizontalCenter="550" verticalCenter="180"> <mx:Canvas width="100%" height="100%" backgroundAlpha="0.0"> <mx:Form x="105.5" y="10" height="323" width="658"> <mx:FormItem label="板报标题:" fontWeight="bold"> <mx:TextInput id="title"/> </mx:FormItem> <mx:FormItem label="板报内容:" height="185" width="385"> <mx:TextArea height="178" width="284" id="content"/> </mx:FormItem> <mx:FormItem label="起效时间:"> <mx:DateField id="start"/> </mx:FormItem> <mx:FormItem label="失效时间:"> <mx:DateField id="finish"/> </mx:FormItem> </mx:Form> <mx:Button x="177" y="341" label="发布板报" click="add(event)"/> <mx:Button x="377" y="341" label="撤销板报"/> </mx:Canvas> <mx:HBox label="succ" width="100%" height="100%" horizontalAlign="center" verticalAlign="middle"> <mx:Label text="恭喜您,板报发布成功!!!" width="233" height="42"/> </mx:HBox> <mx:HBox label="fail" width="100%" height="100%" horizontalAlign="center" verticalAlign="middle"> <mx:Label text="很遗憾,板报发布失败,请重试或联系开发人员!!!" height="48"/> </mx:HBox> </mx:ViewStack> <mx:Canvas label="浏览板报" width="100%" height="100%" backgroundAlpha="0.0"> <mx:Canvas label="浏览板报" width="100%" height="100%" backgroundAlpha="0.0"> <mx:DataGrid x="61" y="41" dataProvider="{lookContent.lastResult.Contents.Content}" width="683" height="203" textAlign="center"> <mx:columns> <mx:DataGridColumn headerText="板报标题" dataField="title"/> <mx:DataGridColumn headerText="板报内容" dataField="content"/> <mx:DataGridColumn headerText="失效时间" dataField="finish"/> <mx:DataGridColumn headerText="发布人" dataField="author"/> </mx:columns> </mx:DataGrid> </mx:Canvas> </mx:Canvas> </mx:TabNavigator> </mx:Application> Servlet代码: //查看板报内容 public void lookContent(HttpServletRequest request,HttpServletResponse response) throws IOException,SQLException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); //从数据库中拿出板报来 ContentDao cDao = new ContentDao(); //查看所有板报 String xml=cDao.lookContent(); System.out.println(xml); //返回XML out.write(xml); } Dao代码: /** * 查看板报 * @throws SQLException */ public String lookContent() throws SQLException { String sql = null; Statement st = null; ResultSet rs = null; connection = conn.getConn(); sql = "select * from [BlackBoard].[dbo].[content]"; System.out.println(sql); st = connection.createStatement();//从数据库连接取得一个处理对象 rs = st.executeQuery(sql); //循环拿到每条板报数据 String xml="<Contents>"; while(rs.next()) { int contentId=rs.getInt(1); String title=rs.getString(2); String content=rs.getString(3); String start=rs.getString(4); String finish=rs.getString(5); String author=rs.getString(6); //生成XML xml=xml+"<Content>"+ "<id>"+contentId+"</id>"+ "<title>"+title+"</title>"+ "<content>"+content+"</content>"+ "<start>"+start+"</start>"+ "<finish>"+finish+"</finish>"+ "<author>"+author+"</author></Content>"; } xml=xml+"</Contents>"; System.out.println(xml); this.close(); return xml; } } 显示效果: 发布页面: 提取板报信息: 错误处理: 2012-10-16 15:55:57 org.apache.catalina.core.StandardWrapperValve invoke 出错行: 2012-10-16 15:55:57 org.apache.catalina.core.StandardWrapperValve invoke 原因:忘记语句st = con.createStatement(); ? 用datagrid显示板报或文章好像并不太合适,明天研究一下其他控件可否使用、、、 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |