您的位置:首页 > 其它

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

2012-10-16 23:36 471 查看
解决了跳转问题之后,什么板报发布之类的就不在话下了,但是在实现了板报发布之后,我发现了一个问题——

之前在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显示板报或文章好像并不太合适,明天研究一下其他控件可否使用、、、
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: