|
几乎所有的Web开发语言都支持Session功能,Servlet也不例外。 Servlet/JSP中的Session功能是通过作用域(scope)这个概念来实现的。
是不是看不太明白?page因为仅用于JSP中,这里只讲述其他三种作用域。首先要声明的一点,所谓“作用域”就是“信息共享的范围”,也就是说一个信息能够在多大的范围内有效。
request
总结 可以看到,每个作用域除了实现接口不同、意义不同之外,它们的使用方法和作用都是相同的,都是通过 getAttribute 和 setAttribute 方法进行信息传递。
示例程序 这一节的示例程序是一个用户登录的模拟程序。文件较多。
为了演示 request、application、session 各个作用域的使用方法, Servlet之间进行了数据传递,数据传递方式如下:
|
原文:http://hi.baidu.com/jgszx/blog/item/23e7304b1b1d7a2b08f7efec.html
列表某列如何设置成下拉框,如何实现数字校验,可通过下面代码实现
效果图:


View Code
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" >
<s:layout>
<s:VerticalLayout/>
</s:layout>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.events.DataGridEvent;
private var dpFormula:ArrayCollection=new ArrayCollection([
{NAME:"AA",OPERATOR:">",OVALUE:5},
{NAME:"BB",OPERATOR:">=",OVALUE:9},
{NAME:"CC",OPERATOR:"<",OVALUE:6}
])
protected function btnsave_clickHandler(event:MouseEvent):void
{
for(var i:Number=0;i<dpFormula.length;i++){
if(dpFormula[i].OVALUE==""){
Alert.show("请输入算法值");
return;
}
if(!isNumber(dpFormula[i].OVALUE)){
dgFormula.editedItemPosition={ columnIndex:2, rowIndex:i};
return
}
}
//校验完毕,可进行保存处理
}
private function isNumber(value:String):Boolean{
var num:Number=Number(value);
if(num.toString()=="NaN"){
return false;
}
else{
return true;
}
}
]]>
</fx:Script>
<mx:DataGrid id="dgFormula" dataProvider="{dpFormula}" width="300" height="200" editable="true" >
<mx:columns>
<mx:DataGridColumn dataField="NAME" headerText="中文名" editable="false"/>
<!--内部渲染 编辑时呈现ComboBox控件-->
<mx:DataGridColumn dataField="OPERATOR" headerText="运算符" editorDataField="value" >
<mx:itemEditor>
<fx:Component>
<mx:VBox verticalGap="0" width="100%" height="100%" verticalAlign="middle">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
public var arrmark:ArrayCollection=new ArrayCollection([
{lable:">"},
{lable:">="},
{lable:"="},
{lable:"<"},
{lable:"<="},
]);
public function get value():Object{
if(cbxMark.selectedItem == null){
return null;
}
var obj:Object=cbxMark.selectedItem;
return obj.lable;
}
override public function set data(value:Object):void{
super.data = value;
//给combobox赋初始值
for each(var obj:Object in arrmark){
if(obj.lable==value.OPERATOR){
cbxMark.selectedItem = obj;
break;
}
}
}
]]>
</fx:Script>
<s:ComboBox id="cbxMark" labelField="lable" dataProvider="{arrmark}"
width="100%" height="100%" />
</mx:VBox>
</fx:Component>
</mx:itemEditor>
</mx:DataGridColumn>
<!--内部渲染 编辑时呈现TextInput控件-->
<mx:DataGridColumn dataField="OVALUE" headerText="值" editorDataField="value" >
<mx:itemEditor>
<fx:Component>
<mx:VBox verticalGap="0" width="100%" height="100%" verticalAlign="middle">
<fx:Declarations>
<mx:NumberValidator id="numVal" source="{txtvalue}" property="text"
allowNegative="true" domain="real" invalidCharError="请输入数字"/>
</fx:Declarations>
<fx:Script>
<![CDATA[
public function get value():Object{
return txtvalue.text;
}
override public function set data(value:Object):void{
super.data = value;
txtvalue.text=value.OVALUE;
}
]]>
</fx:Script>
<s:TextInput id="txtvalue" width="100%" height="100%" change="numVal.validate()" />
</mx:VBox>
</fx:Component>
</mx:itemEditor>
</mx:DataGridColumn>
</mx:columns>
</mx:DataGrid>
<s:Button id="btnsave" label="保存" click="btnsave_clickHandler(event)"/>
</s:Application>
随着我们的项目页面日渐增多,编译速度也越来越蜗牛了。
网上有很多办法教如何提高编译速度的,试了好几个,发现下面方法比较好。
修改方法:
Flex项目右键—》 属性—》Flex应用程序—》把不需要编译的mxml页面删除(等需要编译的时可在此位置添加回来)
Flex项目右键—》 属性—》Flex 模块 —》把已经编译好的模块移除
Tree、DataGrid经常要设置自己制定样式或特殊的UI,我们需要呈现器,经常使用外部呈现器(作为项目渲染器使用的自定义组件在MXML或ActionScript编写),我们需要用到itemRenderer属性来进行设置
使用方法:
<mx:Tree id="IDTree" labelField="@NAME" dataProvider="{DPtree}"
width="200" height="159" itemRenderer="components.TreeCheckBoxRenderer"
click="TreeOnClick(event)" showRoot="true" x="0" y="0">
</mx:Tree>
如希望动态设置itemRenderer,写法如下:
import components.TreeCheckBoxRenderer;
//方法中下入下面代码:
var renderer:IFactory=new ClassFactory(TreeCheckBoxRenderer);
IDTree.itemRenderer=renderer;
Flex页面初始化creationComplete事件中,加入焦点设置语句 : focusManager.setFocus("TextInput组件ID");
页面运行后并看不到效果,将焦点设置语句放到按钮事件中,TextInput倒是焦点设置上了。
主要原因是我们把Flash嵌到HTML页面中,打开HTML页面时并没有聚焦,所以最好在HTML页面上加个JavaScript脚本使其聚焦即可。
步骤:
1、页面初始化creationComplete事件中,加入焦点设置语句 : focusManager.setFocus("TextInput组件ID");
2、bin-debug目录中找到此页面,如 Login.html (Login对于的swf ID 就是Login), 在body中添加js方法
<body onload="document.getElementById('要加载的swf ID').focus()">
通过这两个步骤即可实现初始化焦点![]()
同样的,我们也可以使用ExternalInterface.call调用,讲JS写在Flex的AS脚本里,代码如下:
protected function init():void{
focusManager.setFocus(txtLoginname); //txtLoginname是TextInput组件ID
ExternalInterface.call("document.getElementById('Login').focus()");//Login是要加载的swf ID
}



