加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

实习日志(6):Flex显示Servlet所传值

发布时间:2020-12-15 04:44:10 所属栏目:百科 来源:网络整理
导读:解决了跳转问题之后,什么板报发布之类的就不在话下了,但是在实现了板报发布之后,我发现了一个问题—— 之前在Servlet+JSP开发时,Servlet返回给JSP一个ArrayList,JSP对其进行循环读

解决了跳转问题之后,什么板报发布之类的就不在话下了,但是在实现了板报发布之后,我发现了一个问题——

之前在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
严重: Servlet.service() for servlet ContentServlet threw exception
java.lang.NullPointerException
?

出错行:

2012-10-16 15:55:57 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet ContentServlet threw exception
java.lang.NullPointerException
?出错行:rs = st.executeQuery(sql);

原因:忘记语句st = con.createStatement();
没有给对象赋值就去使用,所以报空指针异常。

?

用datagrid显示板报或文章好像并不太合适,明天研究一下其他控件可否使用、、、

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读