flex和后端的数据交互(二)--<mx:request/>和<mx:form/>

Flex数据提交与验证
本文介绍如何使用Flex的mx:request标签简化服务器请求参数的处理,并展示了如何利用Flex内置的验证组件进行数据验证。

转载:http://daoger.iteye.com/blog/205894

 

用actionscript给服务器请求添加参数难免会很麻烦,使用mx:request标签就可以解决这一问题,可以把他
嵌套到HTTPService标签中实现参数的提交。如下例所示:

Xml代码 复制代码
  1. <mx:request>  
  2.       <txtPara>{txtPara.text}</txtPara>  
  3.  </mx:request>  
<mx:request>
      <txtPara>{txtPara.text}</txtPara>
 </mx:request>


其中txtPara是发送到服务器端参数的名城,标签体是参数值,而标签体的值就是下方文本框的值。
以下是完整的mxml文件:

Xml代码 复制代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" >  
  3.     <mx:Script>     
  4.       <![CDATA[    
  5.         import mx.rpc.events.ResultEvent;                
  6.         import mx.controls.Alert;                        
  7.         private function httpHandle(e:ResultEvent):void   
  8.         {  
  9.             Alert.show(e.result.Result);  
  10.         }  
  11.         ]]>     
  12.     </mx:Script>     
  13.     <mx:HTTPService id="myHttp" url="http://localhost:8080/myflex/http" showBusyCursor="true" result="httpHandle(event);" useProxy="false">  
  14.         <mx:request>  
  15.             <txtPara>{txtPara.text}</txtPara>  
  16.         </mx:request>  
  17.     </mx:HTTPService>  
  18.     <mx:Panel title="TEST HTTPService" width="368" height="140" x="78" y="30" layout="absolute">  
  19.         <mx:Label text="PARA" x="110" y="26"/>     
  20.         <mx:TextInput id="txtPara" x="161" y="24" width="95"/>    
  21.         <mx:Label text="The para sent to service is:" x="58" y="53"/>  
  22.         <mx:Label x="126" y="53" id="lblResult"/>     
  23.         <mx:Button label="Submit" click="myHttp.send()" x="277" y="53"/>      
  24.     </mx:Panel>  
  25. </mx:Application>  
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" >
	<mx:Script>  
      <![CDATA[  
        import mx.rpc.events.ResultEvent;              
		import mx.controls.Alert;                      
		private function httpHandle(e:ResultEvent):void 
		{
			Alert.show(e.result.Result);
		}
        ]]>  
  	</mx:Script>  
	<mx:HTTPService id="myHttp" url="http://localhost:8080/myflex/http" showBusyCursor="true" result="httpHandle(event);" useProxy="false">
		<mx:request>
         	<txtPara>{txtPara.text}</txtPara>
    	</mx:request>
	</mx:HTTPService>
	<mx:Panel title="TEST HTTPService" width="368" height="140" x="78" y="30" layout="absolute">
	   	<mx:Label text="PARA" x="110" y="26"/>  
	    <mx:TextInput id="txtPara" x="161" y="24" width="95"/> 
	    <mx:Label text="The para sent to service is:" x="58" y="53"/>
	    <mx:Label x="126" y="53" id="lblResult"/>  
	    <mx:Button label="Submit" click="myHttp.send()" x="277" y="53"/>   
	</mx:Panel>
</mx:Application>


在服务器端就可以从request中取到txtPara参数的值,这里没有做过多处理,只是在后端取到这个值又通过xml形式返还到客户端。
这是例子运行的截图:


mx:request组件一般是结合mx:form组件一起使用,flex提供了完备的数据校验功能,如对字符串的校验mx:StringValidator、
对电话号码验证的mx:PhoneNumberValidator、对日期验证的mx:DateValidator、对电子邮件验证的mx:EmailValidator、对邮编验证
的mx:ZipCodeValidator等等。下面这个示例来自Flex的在线文档,主要展示flex的form验证功能,没有数据的提交。

Xml代码 复制代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <!-- Simple example to demonstrate Form layout container. -->  
  3. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">  
  4.     <mx:Panel title="Form Container Example" height="75%" width="75%"    
  5.         paddingTop="10" paddingLeft="10" paddingRight="10" paddingBottom="10">  
  6.         <mx:Text width="100%" color="blue"  
  7.             text="Moving from one form field to another triggers the validator."/>  
  8.         <mx:Form width="100%" height="100%">  
  9.             <mx:FormHeading label="Enter values into the form."/>  
  10.             <mx:FormItem label="First name">  
  11.                 <mx:TextInput id="fname" width="200"/>  
  12.             </mx:FormItem>  
  13.             <mx:FormItem label="Date of birth (mm/dd/yyyy)">  
  14.                 <mx:TextInput id="dob" width="200"/>  
  15.             </mx:FormItem>  
  16.             <mx:FormItem label="E-mail address">  
  17.                 <mx:TextInput id="email" width="200"/>  
  18.             </mx:FormItem>  
  19.             <mx:FormItem label="Age">  
  20.                 <mx:TextInput id="age" width="200"/>  
  21.             </mx:FormItem>  
  22.             <mx:FormItem label="SSN">  
  23.                 <mx:TextInput id="ssn" width="200"/>  
  24.             </mx:FormItem>  
  25.             <mx:FormItem label="Zip">  
  26.                 <mx:TextInput id="zip" width="200"/>  
  27.             </mx:FormItem>  
  28.             <mx:FormItem label="Phone">  
  29.                 <mx:TextInput id="phone" width="200"/>  
  30.             </mx:FormItem>  
  31.         </mx:Form>  
  32.     </mx:Panel>  
  33.   
  34.     <mx:StringValidator source="{fname}" property="text" minLength="4" maxLength="12"/>  
  35.     <mx:PhoneNumberValidator source="{phone}" property="text"/>  
  36.     <mx:DateValidator source="{dob}" property="text"/>  
  37.     <mx:EmailValidator source="{email}" property="text"/>  
  38.     <mx:NumberValidator source="{age}" property="text" integerError="Enter Integer value"  
  39.         minValue="18" maxValue="100" domain="int"/>  
  40.     <mx:SocialSecurityValidator source="{ssn}" property="text"/>  
  41.     <mx:ZipCodeValidator source="{zip}" property="text"/>  
  42. </mx:Application>  
<?xml version="1.0" encoding="utf-8"?>
<!-- Simple example to demonstrate Form layout container. -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Panel title="Form Container Example" height="75%" width="75%" 
        paddingTop="10" paddingLeft="10" paddingRight="10" paddingBottom="10">
        <mx:Text width="100%" color="blue"
            text="Moving from one form field to another triggers the validator."/>
        <mx:Form width="100%" height="100%">
            <mx:FormHeading label="Enter values into the form."/>
            <mx:FormItem label="First name">
                <mx:TextInput id="fname" width="200"/>
            </mx:FormItem>
            <mx:FormItem label="Date of birth (mm/dd/yyyy)">
                <mx:TextInput id="dob" width="200"/>
            </mx:FormItem>
            <mx:FormItem label="E-mail address">
                <mx:TextInput id="email" width="200"/>
            </mx:FormItem>
            <mx:FormItem label="Age">
                <mx:TextInput id="age" width="200"/>
            </mx:FormItem>
            <mx:FormItem label="SSN">
                <mx:TextInput id="ssn" width="200"/>
            </mx:FormItem>
            <mx:FormItem label="Zip">
                <mx:TextInput id="zip" width="200"/>
            </mx:FormItem>
            <mx:FormItem label="Phone">
                <mx:TextInput id="phone" width="200"/>
            </mx:FormItem>
        </mx:Form>
    </mx:Panel>

    <mx:StringValidator source="{fname}" property="text" minLength="4" maxLength="12"/>
    <mx:PhoneNumberValidator source="{phone}" property="text"/>
    <mx:DateValidator source="{dob}" property="text"/>
    <mx:EmailValidator source="{email}" property="text"/>
    <mx:NumberValidator source="{age}" property="text" integerError="Enter Integer value"
        minValue="18" maxValue="100" domain="int"/>
    <mx:SocialSecurityValidator source="{ssn}" property="text"/>
    <mx:ZipCodeValidator source="{zip}" property="text"/>
</mx:Application>


示例运行的截图:


其他一些入门例子可以参考:甘先生Blog http://www.blogjava.net/gump/articles/22859.html
更多问题请参考Flex的在线文档:http://www.adobe.com/support/documentation/en/flex/

<el-form :model="projectInfo" label-width="120px" class="project-form"> <el-row :gutter="20"> <el-col :span="8"> <el-form-item label="项目名称:"> <el-input v-model="projectInfo.name" /> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="项目编码:"> <el-input v-model="projectInfo.code" /> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="采集目的:"> <el-input v-model="projectInfo.purpose" /> </el-form-item> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="8"> <el-form-item label="参与者姓名:"> <el-input v-model="projectInfo.participantName" /> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="参与者手机:"> <el-input v-model="projectInfo.participantPhone" /> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="设备名称:"> <el-input v-model="projectInfo.deviceName" /> </el-form-item> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="8"> <el-form-item label="设备类型:"> <el-input v-model="projectInfo.deviceType" /> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="采集文件号:"> <el-input v-model="projectInfo.collectionFileNumber" /> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="设备类别:"> <el-input v-model="projectInfo.deviceCategory" /> </el-form-item> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="8"> <el-form-item label="开始时间:"> <el-input v-model="projectInfo.startTime" /> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="业务与场景:"> <el-input v-model="projectInfo.businessScene" /> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="采集地域:"> <el-input v-model="projectInfo.collectionRegion" /> </el-form-item> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="8"> <el-form-item label="数据文件名:"> <el-input v-model="projectInfo.dataFileName" /> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="上传来源:"> <el-input v-model="projectInfo.uploadSource" /> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="QT报告:"> <el-input v-model="projectInfo.qtReport" /> </el-form-item> </el-col> </el-row> </el-form> 不用这种col row的写法
09-18
你可以使用更简洁、语义化更强的方式重写这个表单,避免使用 `el-row` `el-col` 的栅格布局方式。Element Plus 提供了多种布局方式,比如可以使用 **CSS Flex 布局** 或 **`<div>` 包裹 + 自定义类样式** 来实现同样的响应式效果。 下面是将你原来基于 `el-row`/`el-col` 的表单改造成使用 **Flex 布局 + CSS 类控制宽度与间距** 的版本: ### ✅ 改造后的代码(不使用 el-row / el-col): ```vue <template> <el-form :model="projectInfo" label-width="120px" class="project-form flex-form"> <!-- 第一行 --> <div class="form-row"> <el-form-item label="项目名称:"> <el-input v-model="projectInfo.name" /> </el-form-item> <el-form-item label="项目编码:"> <el-input v-model="projectInfo.code" /> </el-form-item> <el-form-item label="采集目的:"> <el-input v-model="projectInfo.purpose" /> </el-form-item> </div> <!----> <div class="form-row"> <el-form-item label="参与者姓名:"> <el-input v-model="projectInfo.participantName" /> </el-form-item> <el-form-item label="参与者手机:"> <el-input v-model="projectInfo.participantPhone" /> </el-form-item> <el-form-item label="设备名称:"> <el-input v-model="projectInfo.deviceName" /> </el-form-item> </div> <!-- 第三行 --> <div class="form-row"> <el-form-item label="设备类型:"> <el-input v-model="projectInfo.deviceType" /> </el-form-item> <el-form-item label="采集文件号:"> <el-input v-model="projectInfo.collectionFileNumber" /> </el-form-item> <el-form-item label="设备类别:"> <el-input v-model="projectInfo.deviceCategory" /> </el-form-item> </div> <!-- 第四行 --> <div class="form-row"> <el-form-item label="开始时间:"> <el-input v-model="projectInfo.startTime" /> </el-form-item> <el-form-item label="业务与场景:"> <el-input v-model="projectInfo.businessScene" /> </el-form-item> <el-form-item label="采集地域:"> <el-input v-model="projectInfo.collectionRegion" /> </el-form-item> </div> <!-- 第五行 --> <div class="form-row"> <el-form-item label="数据文件名:"> <el-input v-model="projectInfo.dataFileName" /> </el-form-item> <el-form-item label="上传来源:"> <el-input v-model="projectInfo.uploadSource" /> </el-form-item> <el-form-item label="QT报告:"> <el-input v-model="projectInfo.qtReport" /> </el-form-item> </div> </el-form> </template> <style scoped> /* 使用 Flex 实现每行三列的等宽布局 */ .flex-form .form-row { display: flex; gap: 20px; /* 相当于 gutter=20 */ margin-bottom: 20px; } .flex-form .form-row .el-form-item { flex: 1; /* 平均分配空间 */ min-width: 0; /* 防止内容溢出时 flex 失效 */ } /* 可选:限制最大输入框宽度,防止过宽 */ .flex-form .el-form-item :deep(.el-input) { width: 100%; } </style> ``` --- ### 🔍 解释说明: - `display: flex`:让每一行内的 `<el-form-item>` 水平排列。 - `gap: 20px`:设置项之间的间距,相当于原来的 `:gutter="20"`。 - `flex: 1`:每个表单项自动均分父容器宽度(三等分),实现类似 `span="8"` 的效果。 - `min-width: 0`:防止文本或输入内容导致 flex 布局撑开失效。 - 使用 `:deep()`(或 `>>>`)穿透作用于 Element Plus 组件内部样式,确保输入框填满容器。 - 结构更清晰,去除了冗余的 `el-col` 标签,减少嵌套层级。 --- ### ✅ 优点对比原方案: | 特性 | 原 `el-row/col` 方案 | 新 Flex 方案 | |------|------------------------|---------------| | 代码复杂度 | 高(多层嵌套) | 低(扁平结构) | | 可读性 | 一般 | 更好 | | 灵活性 | 固定 span 分栏 | 更灵活(可动态调整) | | 响应式支持 | 依赖 Element 的响应式断点 | 可配合媒体查询自定义 | | 维护性 | 较差 | 更好 | --- ### 📌 注意事项: 如果你需要在小屏幕上变成单列显示,可以加上媒体查询: ```css @media (max-width: 768px) { .flex-form .form-row { flex-direction: column; gap: 10px; } } ``` 这样在移动端就会垂直堆叠,提升用户体验。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值