﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-jackyrong</title><link>http://www.cnblogs.com/jackyrong/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Oct 2008 09:53:14 GMT</lastBuildDate><pubDate>Sun, 12 Oct 2008 09:53:14 GMT</pubDate><ttl>60</ttl><item><title>jstl格式化日期 </title><link>http://www.cnblogs.com/jackyrong/archive/2008/10/09/1307574.html</link><dc:creator>jackyrong的世界</dc:creator><author>jackyrong的世界</author><pubDate>Thu, 09 Oct 2008 14:35:00 GMT</pubDate><guid>http://www.cnblogs.com/jackyrong/archive/2008/10/09/1307574.html</guid><wfw:comment>http://www.cnblogs.com/jackyrong/comments/1307574.html</wfw:comment><comments>http://www.cnblogs.com/jackyrong/archive/2008/10/09/1307574.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/jackyrong/comments/commentRss/1307574.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jackyrong/services/trackbacks/1307574.html</trackback:ping><description><![CDATA[<div class="postText">JSP Standard Tag Libraries<br />
Formatting and Internationalization<br />
Two form input parameters, 'date' and 'isoDate', are URL-encoded in the link leading to this page. 'isoDate' is formatted according to the ISO8601 standard. <br />
Formatting of numbers and dates is based on the browser's locale setting. Formatting will change if you switch the default language setting from English to French or German, for example. (The browser needs to be restarted, too.) <br />
<br />
Library import and parameter capturing:<br />
<br />
&lt;%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %&gt;<br />
&lt;%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %&gt;<br />
<br />
&lt;fmt:parseDate value="${param.date}" var="date" pattern="yyyy/MM/dd:HH:mm:ss&gt;<br />
&lt;fmt:parseDate value="${param.isoDate}" var="isoDate" pattern="yyyyMMdd'T'HHmmss"&gt;<br />
<br />
The input parameters must match the patterns, or the JSP will thrown an exception. This page does no error handling. <br />
<br />
Input parameters:<br />
Date: &nbsp; &nbsp;2004/04/01:13:30:00 &nbsp; Java format: Thu Apr 01 13:30:00 CST 2004<br />
isoDate: 20040531T235959 &nbsp; &nbsp; &nbsp; Java format: Mon May 31 23:59:59 CDT 2004<br />
<br />
Dates<br />
Tag Output <br />
Attribute: value; required. Tag has no body. <br />
&lt;fmt:formatDate value="${date}" type="both"/&gt;<br />
<br />
&nbsp;2004-4-1 13:30:00 &nbsp;<br />
&lt;fmt:formatDate value="${isoDate}" type="both"/&gt;<br />
<br />
&nbsp;2004-5-31 23:59:59 &nbsp;<br />
Attribute: type; optional. Indicates what to print: date, time, or both. <br />
&lt;fmt:formatDate value="${date}" type="date"/&gt;<br />
<br />
&nbsp;2004-4-1 &nbsp;<br />
&lt;fmt:formatDate value="${isoDate}" type="time"/&gt;<br />
<br />
&nbsp;23:59:59 &nbsp;<br />
Attribute: dateStyle; optional. Varies the date format. <br />
&lt;fmt:formatDate value="${isoDate}" type="date" dateStyle="default"/&gt;<br />
<br />
&nbsp;2004-5-31 &nbsp;<br />
&lt;fmt:formatDate value="${isoDate}" type="date" dateStyle="short"/&gt;<br />
<br />
&nbsp;04-5-31 &nbsp;<br />
&lt;fmt:formatDate value="${isoDate}" type="date" dateStyle="medium"/&gt;<br />
<br />
&nbsp;2004-5-31 &nbsp;<br />
&lt;fmt:formatDate value="${isoDate}" type="date" dateStyle="long"/&gt;<br />
<br />
&nbsp;2004年5月31日 &nbsp;<br />
&lt;fmt:formatDate value="${isoDate}" type="date" dateStyle="full"/&gt;<br />
<br />
&nbsp;2004年5月31日 星期一 &nbsp;<br />
Attribute: timeStyle; optional. Varies the time format. <br />
&lt;fmt:formatDate value="${isoDate}" type="time" timeStyle="default"/&gt;<br />
<br />
&nbsp;23:59:59 &nbsp;<br />
&lt;fmt:formatDate value="${isoDate}" type="time" timeStyle="short"/&gt;<br />
<br />
&nbsp;下午11:59 &nbsp;<br />
&lt;fmt:formatDate value="${isoDate}" type="time" timeStyle="medium"/&gt;<br />
<br />
&nbsp;23:59:59 &nbsp;<br />
&lt;fmt:formatDate value="${isoDate}" type="time" timeStyle="long"/&gt;<br />
<br />
&nbsp;下午11时59分59秒 &nbsp;<br />
&lt;fmt:formatDate value="${isoDate}" type="time" timeStyle="full"/&gt;<br />
<br />
&nbsp;下午11时59分59秒 CDT &nbsp;<br />
Attribute: pattern; optional. Inidcates date/time custom patterns. <br />
&lt;fmt:formatDate value="${date}" type="both" pattern="EEEE, MMMM d, yyyy HH:mm:ss Z"/&gt;<br />
<br />
&nbsp;星期四, 四月 1, 2004 13:30:00 -0600 &nbsp;<br />
&lt;fmt:formatDate value="${isoDate}" type="both" pattern="d MMM yy, h:m:s a zzzz/&gt;<br />
<br />
&nbsp;31 五月 04, 11:59:59 下午 中央夏令时 </div>
<img src ="http://www.cnblogs.com/jackyrong/aggbug/1307574.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42950/" target="_blank">[新闻]Google开拓美政府机构市场 微软业务受冲击</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>struts 2日期转换小结</title><link>http://www.cnblogs.com/jackyrong/archive/2008/10/07/1305812.html</link><dc:creator>jackyrong的世界</dc:creator><author>jackyrong的世界</author><pubDate>Tue, 07 Oct 2008 13:17:00 GMT</pubDate><guid>http://www.cnblogs.com/jackyrong/archive/2008/10/07/1305812.html</guid><wfw:comment>http://www.cnblogs.com/jackyrong/comments/1305812.html</wfw:comment><comments>http://www.cnblogs.com/jackyrong/archive/2008/10/07/1305812.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/jackyrong/comments/commentRss/1305812.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jackyrong/services/trackbacks/1305812.html</trackback:ping><description><![CDATA[<p>&nbsp; 在struts2中，比较反感struts2本身的datatime picker,因为听说问题很多,于是可以网上找些开源的日期的js效果,使用时,这样<br />
<font face="Verdana">&nbsp;&lt;s:textfield label="出版日期" name="book.bookDate" onfocus="new WdatePicker(this)"/&gt;</font></p>
<p>在xxx.hbm.xml中设置</p>
<p>&nbsp;&nbsp; <font face="Verdana">&nbsp;&lt;property name="bookDate" type="java.util.Date"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;column name="book_date"&nbsp; length="30"/&gt;</font></p>
<p>mysql中是date类型</p>
<p>还要写个转换器,放在src目录下,命名为xwork-conversion.properties</p>
<p>&nbsp; <font face="Verdana">java.util.Date=xxxx.DateConverter</font></p>
<p>DateConver类&nbsp;<br />
&nbsp; </p>
<p><font face="Verdana">import java.text.SimpleDateFormat;<br />
import java.util.Date;<br />
import java.util.Map;</font></p>
<p><font face="Verdana">import ognl.DefaultTypeConverter;<br />
import ognl.ParseException;</font></p>
<p><font face="Verdana">&nbsp;public class DateConverter extends DefaultTypeConverter {&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Object convertValue(Map ognlContext, Object value, Class toType) {&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object result = null;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (toType == Date.class) {&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = doConvertToDate(value);&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (toType == String.class) {&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = doConvertToString(value);&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private Date doConvertToDate(Object value) {&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date result = null;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (value instanceof String) {&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = sdf.parse((String) value);&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) {&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //e.printStackTrace(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("dateconverter is failed!");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (value instanceof Object[]) {&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // let's try to convert the first element only&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object[] array = (Object[]) value;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((array != null) &amp;&amp; (array.length &gt;= 1)) {&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value = array[0];&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = doConvertToDate(value);&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (Date.class.isAssignableFrom(value.getClass())) {&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = (Date) value;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private String doConvertToString(Object value) {&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String result = null;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (value instanceof Date) {&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = sdf.format(value);&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
</font></p>
<img src ="http://www.cnblogs.com/jackyrong/aggbug/1305812.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42949/" target="_blank">[新闻]消息称苹果正在开发iTunes网络电视</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>cakephp 学习小结 6</title><link>http://www.cnblogs.com/jackyrong/archive/2008/10/06/1304655.html</link><dc:creator>jackyrong的世界</dc:creator><author>jackyrong的世界</author><pubDate>Mon, 06 Oct 2008 05:35:00 GMT</pubDate><guid>http://www.cnblogs.com/jackyrong/archive/2008/10/06/1304655.html</guid><wfw:comment>http://www.cnblogs.com/jackyrong/comments/1304655.html</wfw:comment><comments>http://www.cnblogs.com/jackyrong/archive/2008/10/06/1304655.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/jackyrong/comments/commentRss/1304655.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jackyrong/services/trackbacks/1304655.html</trackback:ping><description><![CDATA[<p><font face="Verdana">cakephp 学习小结 6</font></p>
<font face="Verdana">
<p><br />
1 把运行时，cake下部的debug信息改掉，可以这样<br />
&nbsp;&nbsp; 把app\config\core.php的第43行<br />
&nbsp;&nbsp; * Development Mode:<br />
&nbsp;* &nbsp;1: Errors and warnings shown, model caches refreshed, flash messages halted.<br />
&nbsp;* &nbsp;2: As in 1, but also with full debug messages and SQL output.<br />
&nbsp;* &nbsp;3: As in 2, but also with full controller dump.<br />
&nbsp;*<br />
&nbsp;* In production mode, flash messages redirect after a time interval.<br />
&nbsp;* In development mode, you need to click the flash message to continue.<br />
&nbsp;*/<br />
&nbsp;Configure::write('debug', 2);<br />
&nbsp; 改为Configure::write('debug', 0);</p>
<p>2 把比如http://localhost:8082/myphp5/quickwall/home改<br />
为http://localhost:8082/myphp5/quickwall即可访问，<br />
更改app\config\route.php里，改为<br />
&nbsp; Router::connect('/', array('controller' =&gt; 'questions', 'action' =&gt; 'home'));<br />
&nbsp;&nbsp; <br />
&nbsp; </p>
<p>3 比如自定义验证器的编写<br />
&nbsp;&nbsp;&nbsp; 在usermodel中<br />
function checkUnique($data, $fieldName) {<br />
$valid = false;<br />
if(isset($fieldName) &amp;&amp; $this-&gt;hasField($fieldName)) {<br />
$valid = $this-&gt;isUnique(array($fieldName =&gt; $data));<br />
}<br />
return $valid;<br />
}</p>
<p>'unique' =&gt; array(<br />
'rule' =&gt; array('checkUnique', 'username'),<br />
'message' =&gt; 'User name taken. Use another'<br />
)</p>
<p>4 function beforeFilter(){<br />
$this-&gt;Auth-&gt;allow('signup');<br />
}<br />
&nbsp; 该filter在各个action前先执行，象JAVA中的过滤器了。allow则允许哪些action是可以不经过auth验证就执行的。</p>
<p>&nbsp;</p>
<p>5 <br />
&nbsp;在app目录下写个app_controller.php，其他类继承它<br />
function beforeFilter(){<br />
$this-&gt;Auth-&gt;loginRedirect = array('controller'<br />
=&gt; 'questions', 'action' =&gt; 'home');</p>
<p>$this-&gt;Auth-&gt;logoutRedirect = array('controller'<br />
=&gt; 'questions', 'action' =&gt; 'home');</p>
<p>$this-&gt;Auth-&gt;allow('signup', 'confirm', 'home', 'show');<br />
$this-&gt;Auth-&gt;authorize = 'controller';<br />
$this-&gt;Auth-&gt;userScope = array('User.confirmed' =&gt; '1');<br />
$this-&gt;set('loggedIn', $this-&gt;Auth-&gt;user('id'));<br />
}</p>
<p><br />
function isAuthorized() {<br />
return true;<br />
}</p>
<p>&nbsp; 其中$this-&gt;Auth-&gt;loginRedirect，$this-&gt;Auth-&gt;logoutRedirect指出登陆成功，退出后的路径了。<br />
userScope指明当某个条件成立时，才允许登陆，否则不允许<br />
$this-&gt;set('loggedIn', $this-&gt;Auth-&gt;user('id'));把登陆后的用户id放到loggedin,以方便VIEW层去用。<br />
比如可以这样，在模版里</p>
<p>&nbsp;&nbsp; &lt;?php if($loggedIn): ?&gt;<br />
&nbsp;&nbsp;&nbsp; 。。。。。<br />
&nbsp;&lt;?php else?&gt;<br />
&nbsp; .....<br />
&lt;?php end if;?&gt;</p>
<p><br />
isAuthorized()是必须有的，这里可以写些成功验证后的函数，无的话这里可以return true</p>
<p>&nbsp;&nbsp; 然后在user_controll里的login,logout可以这样写。<br />
&nbsp;function login() {<br />
}</p>
<p><br />
function logout() {<br />
$this-&gt;Session-&gt;setFlash('Logout');<br />
$this-&gt;redirect($this-&gt;Auth-&gt;logout());<br />
}</p>
<p><br />
6 使用cookie<br />
&nbsp;&nbsp; &lt;?php<br />
class AppController extends Controller {<br />
var $components = array('Auth', 'Cookie');<br />
&nbsp; ...<br />
&nbsp;&nbsp; 在appcontrol中，设置<br />
&nbsp;&nbsp; $this-&gt;Auth-&gt;autoRedirect = false;<br />
$this-&gt;Cookie-&gt;name = 'QuickWall';</p>
<p>if(!$this-&gt;Auth-&gt;user('id')) {<br />
&nbsp; &nbsp;&nbsp;&nbsp;$cookie = $this-&gt;Cookie-&gt;read('User');<br />
&nbsp; &nbsp;&nbsp;&nbsp;if($cookie) {<br />
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;Auth-&gt;login($cookie);<br />
&nbsp; &nbsp;&nbsp;&nbsp;}<br />
&nbsp; &nbsp;&nbsp;}</p>
<p>&nbsp;</p>
<p>&nbsp;其中&nbsp; $this-&gt;Auth-&gt;autoRedirect默认为true,这里为false,即代表要登陆成功后，<br />
要到login中去，就是<br />
&nbsp; function login() {<br />
if ($this-&gt;Auth-&gt;user()) {<br />
if (!empty($this-&gt;data)) {<br />
if (empty($this-&gt;data['User']['remember_me'])) {<br />
$this-&gt;Cookie-&gt;del('User');<br />
} else {<br />
$cookie = array();<br />
$cookie['username'] = $this-&gt;data['User']<br />
['username'];<br />
$cookie['password'] = $this-&gt;data['User']<br />
['password'];<br />
$this-&gt;Cookie-&gt;write('User', $cookie, true,<br />
'+2 weeks');<br />
}<br />
unset($this-&gt;data['User']['remember_me']);<br />
}<br />
$this-&gt;redirect($this-&gt;Auth-&gt;redirect());</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp; </p>
<p><font face="Verdana">7 使用javascript<br />
&nbsp;&nbsp; 增加helper,比如在appcontroller中:<br />
&nbsp;&nbsp;&nbsp; var $helpers = array('Html', 'Form', 'Javascript');<br />
&nbsp; 在layout中增加<br />
&nbsp;&nbsp; &nbsp;&lt;?php e($javascript-&gt;link('prototype-1.6.0.2')); ?&gt;<br />
&nbsp;&lt;?php e($scripts_for_layout); ?&gt;<br />
&nbsp; 把prototype.js等放到app/webroot/js目录下</font></p>
<p><font face="Verdana"></font>&nbsp;</p>
<p></font>&nbsp;</p>
<img src ="http://www.cnblogs.com/jackyrong/aggbug/1304655.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42948/" target="_blank">[新闻]微软周一开电话会议 预计将发布Silverlight2.0</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>flex3+blazeds+spring+hibernate整合小结</title><link>http://www.cnblogs.com/jackyrong/archive/2008/10/05/1304007.html</link><dc:creator>jackyrong的世界</dc:creator><author>jackyrong的世界</author><pubDate>Sat, 04 Oct 2008 17:36:00 GMT</pubDate><guid>http://www.cnblogs.com/jackyrong/archive/2008/10/05/1304007.html</guid><wfw:comment>http://www.cnblogs.com/jackyrong/comments/1304007.html</wfw:comment><comments>http://www.cnblogs.com/jackyrong/archive/2008/10/05/1304007.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/jackyrong/comments/commentRss/1304007.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jackyrong/services/trackbacks/1304007.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp; 近来flex盛行，因此这两天也借了本书看了两天，发觉作为非页面设计人员，flex 还是很好的，flex builder很好用，拖拉就</p>
<p>有很ＣＯＯＬ的界面了，而且flex总的来说基本东西不难学，有编程基础的人很快掌握，当然要精通就要时间了，因为库，ＡＰＩ等很多．</p>
<p>下面就<font face="Verdana">flex3+blazeds+spring+hibernate整合作个小结，是之前读外国好文的心得，而见国内这方面的文比较少，因此笔记之．</font></p>
<p>&nbsp;</p>
<p>　　　首先要知道，flex3是做前端的，其实就是view层的东西了，可以替换掉struts 2，如果项目中你喜欢的话．而blazeds是<br />
adobe免费的转换网关（可以理解成转换网关），负责把后端的数据与actionscript进行转换，当然也可以用</p>
<p>收费的那个livecycle data services了．而spring+hiberate的组合很传统了．</p>
<p>１　准备好东西<br />
　　　Ａ　下载blazeds，这里下载<font face="Verdana">blazeds_turnkey_3-0-0-544</font>的版本，因为自带了tomcat还有些好的例子</p>
<p>　　　Ｂ　FLEXBUILDER 3</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C MYSQL 5<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D SPRING+HIBERNATE,myeclipse，这些就不说了．</p>
<p>&nbsp;</p>
<p>２　本文是根据<font face="Verdana"><a href="http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&amp;productId=2&amp;postId=7923">http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&amp;productId=2&amp;postId=7923</a></font></p>
<p>　去小结的．其中在<font face="Verdana"><a href="http://www.adobe.com/devnet/livecycle/articles/blazeds_spring.html">http://www.adobe.com/devnet/livecycle/articles/blazeds_spring.html</a></font>中，讨论了如何跟spring结合，如何跟<br />
hsqldb结合．那么文中是举了blazeds自带的例子来做说明的，在它的基础上进行修改，变成hibernate+spring.</p>
<p>&nbsp;</p>
<p>３　先从<font face="Verdana"><a href="http://download.macromedia.com/pub/developer/flex_spring.zip">http://download.macromedia.com/pub/developer/flex_spring.zip</a></font>下载例子文件，其中包括了例子和作者写的<br />
用spring调用的组件．</p>
<p>　　　解压flex-spring.zip <br />
将/flex-spring/factory/bin/flex/samples/factories 目录下的class文件拷贝到/WEB-INF/classes/flex/samples/factories目录中 <br />
</p>
<p>４　在/WEB-INF/flex/services-config.xml文件中注册spring factory <br />
&lt;factories&gt; <br />
&lt;factory id="spring" class="flex.samples.factories.SpringFactory"/&gt; <br />
&lt;/factories&gt; <br />
</p>
<p>５　配置web.xml <br />
&lt;context-param&gt; <br />
&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt; <br />
&lt;param-value&gt;/WEB-INF/applicationContext.xml&lt;/param-value&gt; <br />
&lt;/context-param&gt; <br />
&lt;listener&gt; <br />
&lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener &lt;/listener-class&gt; <br />
&lt;/listener&gt; <br />
</p>
<p>６　在下载的程序中，我们重点关注samples\store这个目录下的程序．<br />
其中flex目录是写好了的flex界面了，大家可以用flexbuilder去看．</p>
<p>而java目录其实就是后端的目录．无非就是用spring来实现对product对象的增，删改．</p>
<p>７　我们先用mysql　５在建立数据库　flexhibernate,表结构如下：<br />
<font face="Verdana">CREATE TABLE `product` (<br />
&nbsp; `productId` int(11) NOT NULL auto_increment,<br />
&nbsp; `name` varchar(40) NOT NULL,<br />
&nbsp; `category` varchar(40) NOT NULL,<br />
&nbsp; `image` varchar(255) NOT NULL,<br />
&nbsp; `price` double NOT NULL,<br />
&nbsp; `description` varchar(255) NOT NULL,<br />
&nbsp; `qtyInStock` int(20) NOT NULL,<br />
&nbsp; KEY `productId` (`productId`)<br />
)</font></p>
<p>&nbsp;</p>
<p>8 ,我们编写一个product.hbm.xml如下，放在samples\store\java目录下<br />
　　　<font face="Verdana">&lt;?xml version="1.0"?&gt;<br />
&lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"[]&gt;<br />
&lt;hibernate-mapping package="flex.samples.spring.store"&gt;<br />
&nbsp;&lt;class name="Product" table="PRODUCT"&gt;<br />
&nbsp;&nbsp;&lt;id name="productId" type="long" column="PRODUCTID"<br />
&nbsp;&nbsp;&nbsp;unsaved-value="0"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;generator class="identity" /&gt;<br />
&nbsp;&nbsp;&lt;/id&gt;<br />
&nbsp;&nbsp;&lt;property name="name" column="NAME" length="40" /&gt;<br />
&nbsp;&nbsp;&lt;property name="category" column="CATEGORY" length="40" /&gt;<br />
&nbsp;&nbsp;&lt;property name="image" column="IMAGE" length="40" /&gt;<br />
&nbsp;&nbsp;&lt;property name="price" column="PRICE" type="double" /&gt;<br />
&nbsp;&nbsp;&lt;property name="description" column="DESCRIPTION" length="255" /&gt;<br />
&nbsp;&nbsp;&lt;property name="qtyInStock" column="QTYINSTOCK"<br />
&nbsp;&nbsp;&nbsp;type="integer" /&gt;<br />
&nbsp;&lt;/class&gt;<br />
&lt;/hibernate-mapping&gt;</font></p>
<p>&nbsp;</p>
<p>9 编写applicationContext.xml,注意要放在<font face="Verdana">blazeds_turnkey_3-0-0-544\tomcat\webapps\blazeds\WEB-INF</font>下</p>
<p>内容如下<br />
　　　　</p>
<p><font face="Verdana">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"&gt;<br />
&lt;beans&gt;<br />
&nbsp;</font><font face="Verdana">&nbsp;&lt;bean id="dataSource"<br />
&nbsp;&nbsp;class="org.apache.commons.dbcp.BasicDataSource"<br />
&nbsp;&nbsp;destroy-method="close"&gt;<br />
&nbsp;&nbsp;&lt;property name="driverClassName" value="com.mysql.jdbc.Driver" /&gt;<br />
&nbsp;&nbsp;&lt;property name="url"<br />
&nbsp;&nbsp;&nbsp;value="jdbc:mysql://localhost:3306/flexhibernate" /&gt;<br />
&nbsp;&nbsp;&lt;property name="username" value="root" /&gt;<br />
&nbsp;&nbsp;&lt;property name="password" value="abc" /&gt;<br />
&nbsp;&lt;/bean&gt;</font></p>
<p><font face="Verdana">&nbsp;&lt;bean id="sessionFactory"<br />
&nbsp;&nbsp;class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt;<br />
&nbsp;&nbsp;&lt;property name="mappingResources"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;flex/samples/spring/store/Product.hbm.xml&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/list&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="hibernateProperties"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;props&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="hibernate.dialect"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.hibernate.dialect.HSQLDialect<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/props&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="dataSource"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;ref bean="dataSource" /&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;/bean&gt;</font></p>
<p><font face="Verdana">&nbsp;&lt;bean id="txManager"<br />
&nbsp;&nbsp;class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt;<br />
&nbsp;&nbsp;&lt;property name="sessionFactory"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;ref local="sessionFactory" /&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;/bean&gt;<br />
&nbsp;&lt;bean id="productDAOBeanTarget"<br />
&nbsp;&nbsp;class="flex.samples.spring.store.HibernateProductDAO"&gt;<br />
&nbsp;&nbsp;&lt;property name="sessionFactory" ref="sessionFactory" /&gt;<br />
&nbsp;&lt;/bean&gt;</font></p>
<p><font face="Verdana">&nbsp;&lt;bean id="productDAOBean"<br />
&nbsp;&nbsp;class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"&gt;<br />
&nbsp;&nbsp;&lt;property name="transactionManager" ref="txManager" /&gt;<br />
&nbsp;&nbsp;&lt;property name="target" ref="productDAOBeanTarget" /&gt;<br />
&nbsp;&nbsp;&lt;property name="transactionAttributes"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;props&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="create*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="update*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="delete*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&lt;/props&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;/bean&gt;<br />
&lt;/beans&gt;</font></p>
<p>　　很典型的传统spring+hibernate的配置了．</p>
<p>&nbsp;</p>
<p>10 修改<font face="Verdana">blazeds_turnkey_3-0-0-544\tomcat\webapps\blazeds\WEB-INF\flex</font>目录下的<br />
remoting-config.xml文件，增加如下部分：<br />
　　<font face="Verdana">&lt;destination id="productService"&gt;<br />
&lt;properties&gt;<br />
&lt;factory&gt;spring&lt;/factory&gt;<br />
&lt;source&gt;productDAOBean&lt;/source&gt;<br />
&lt;/properties&gt;<br />
&lt;/destination&gt;</font>　　</p>
<p>&nbsp;&nbsp;</p>
<p>11 准备spring,hibernate,mysqljdbc等驱动包，可以先放在<font face="Verdana">blazeds_turnkey_3-0-0-544\tomcat\webapps\blazeds\WEB-INF\lib</font>下，</p>
<p>当然也可以通过下面写ＡＮＴ文件去指定，道理都是一样的．注意我用的是spring 1.2.8的包，２．０Ｘ的还没试过，各位可以试下．</p>
<p>&nbsp;</p>
<p>12 可以看到，原文作者在sample\store目录下，有个build.xml，但其中因为我是windows下的，所以修改了路径符号为＼，</p>
<p>如下<br />
　　</p>
<p><font face="Verdana">&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;project name="Store Application" basedir="." default="main"&gt;</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; &lt;property name="FLEX_HOME" value="C:\Program Files\Adobe\Flex Builder 3\sdks\3.1.0"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="DEPLOY_DIR" value="L:\blazeds_turnkey_3-0-0-544\tomcat\webapps\blazeds"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="CONTEXT_ROOT" value="blazeds"/&gt;<br />
&lt;property&nbsp;&nbsp; name="lib.dir"&nbsp;&nbsp; value="L:\blazeds_turnkey_3-0-0-544\tomcat\webapps\blazeds\WEB-INF\lib"/&gt; <br />
&lt;path&nbsp;&nbsp; id="classpath"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset&nbsp;&nbsp; dir="${lib.dir}"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include&nbsp;&nbsp; name="*.jar"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/path&gt;&nbsp;&nbsp; </font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; &lt;taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}\ant\flexTasks.jar"&nbsp; /&gt;</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; &lt;target name="main" depends="compile-flex,html-wrapper,compile-java"/&gt;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;target name="compile-flex"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mxmlc file="flex/storeadmin.mxml" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;services="${DEPLOY_DIR}\WEB-INF\flex\services-config.xml"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;context-root="${CONTEXT_ROOT}"<br />
&nbsp;&nbsp;&nbsp;output="${DEPLOY_DIR}\storeadmin\storeadmin.swf"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mxmlc file="flex/store.mxml" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;services="${DEPLOY_DIR}/WEB-INF\flex\services-config.xml"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;context-root="${CONTEXT_ROOT}"<br />
&nbsp;&nbsp;&nbsp;output="${DEPLOY_DIR}\store\store.swf"/&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt;copy todir="${DEPLOY_DIR}\store\pic"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;fileset dir="flex\pic"/&gt;<br />
&nbsp; &nbsp;&nbsp;&lt;/copy&gt;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/target&gt;</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; &lt;target name="compile-java"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;javac srcdir="java" destdir="${DEPLOY_DIR}\WEB-INF\classes"&gt;<br />
&nbsp;&nbsp; &lt;classpath&nbsp;&nbsp; refid="classpath"/&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;/javac&gt;<br />
&nbsp;&nbsp; &lt;copy todir="${DEPLOY_DIR}/WEB-INF/classes/flex/samples/spring/store"&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;fileset dir="java" includes="**/*hbm.xml"/&gt;&nbsp; <br />
&nbsp; &lt;/copy&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;/target&gt;</font></p>
<p><font face="Verdana">&nbsp;&lt;target name="html-wrapper"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html-wrapper <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; application="app"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; width="100%"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height="100%"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swf="storeadmin"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; version-major="9"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; version-minor="0"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; version-revision="0"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; history="true"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; template="express-installation"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output="${DEPLOY_DIR}\storeadmin"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;html-wrapper <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; application="app"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; width="100%"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height="100%"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swf="store"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; version-major="9"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; version-minor="0"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; version-revision="0"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; history="true"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; template="express-installation"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output="${DEPLOY_DIR}\store"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/target&gt;<br />
&nbsp;&nbsp;&nbsp; <br />
&lt;/project&gt;</font></p>
<p>&nbsp;</p>
<p>　要注意的是，因为flex 3的ant扩展了ant,因此，要保证<font face="Verdana">Adobe\Flex Builder 3\sdks\3.1.0\ant</font>下有文件<font face="Verdana">flexTasks.jar</font>，</p>
<p>也要把<font face="Verdana">flexTasks.jar</font>　ＣＯＰＹ到ant的目录下去．</p>
<p>　　之后就可以在sample\store根目录下，运行ant打包运行了．</p>
<p>&nbsp;</p>
<p>13 之后启动tomcat，运行<br />
　　　<a href="http://localhost:8400/blazeds/store/index.html" target="_blank">http://localhost:8400/blazeds/store/index.html</a><br />
　和&nbsp;<a href="http://localhost:8400/blazeds/storeadmin/index.html" target="_blank">http://localhost:8400/blazeds/storeadmin/index.html</a>,<br />
&nbsp; 就可以看到效果了．</p>
<p>&nbsp;</p>
<p>１４　简单分析其调用过程<br />
　　把其中一个flex文件打开，比如<br />
　　　</p>
<p><font face="Verdana">&lt;Product id="product"<br />
&nbsp;&nbsp;name="{productName.text}"<br />
&nbsp;&nbsp;category="{category.text}"<br />
&nbsp;&nbsp;price="{Number(price.text)}"<br />
&nbsp;&nbsp;qtyInStock="{int(qtyInStock.text)}"<br />
&nbsp;&nbsp;image="{image.text}"<br />
&nbsp;&nbsp;description="{description.text}"/&gt;</font></p>
<p><font face="Verdana">&nbsp;&lt;mx:RemoteObject id="srv" destination="productService"/&gt;</font></p>
<p><font face="Verdana">&nbsp;&lt;mx:Form width="100%"&gt;<br />
&nbsp;<br />
&nbsp;&nbsp;&lt;mx:FormItem label="Name"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;mx:TextInput id="productName" text="{product.name}"/&gt;<br />
&nbsp;&nbsp;&lt;/mx:FormItem&gt;<br />
&nbsp;<br />
&nbsp;&nbsp;&lt;mx:FormItem label="Category"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;mx:TextInput id="category" text="{product.category}"/&gt;<br />
&nbsp;&nbsp;&lt;/mx:FormItem&gt;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&lt;mx:FormItem label="Image"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;mx:TextInput id="image" text="{product.image}"/&gt;<br />
&nbsp;&nbsp;&lt;/mx:FormItem&gt;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&lt;mx:FormItem label="Price"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;mx:TextInput id="price" text="{product.price}"/&gt;<br />
&nbsp;&nbsp;&lt;/mx:FormItem&gt;</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&lt;mx:FormItem label="In Stock"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;mx:TextInput id="qtyInStock" text="{product.qtyInStock}"/&gt;<br />
&nbsp;&nbsp;&lt;/mx:FormItem&gt;<br />
&nbsp;<br />
&nbsp;&nbsp;&lt;mx:FormItem label="Description" width="100%"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;mx:TextArea id="description" text="{product.description}" width="100%" height="100"/&gt;<br />
&nbsp;&nbsp;&lt;/mx:FormItem&gt;<br />
&nbsp;&nbsp;<br />
&nbsp;&lt;/mx:Form&gt;</font></p>
<p><font face="Verdana">&nbsp;&lt;mx:ControlBar&gt;<br />
&nbsp;&nbsp;&lt;mx:Button label="Update" click="srv.updateProduct(product)"/&gt;<br />
&nbsp;&lt;/mx:ControlBar&gt;</font></p>
<p>&nbsp;</p>
<p>　　其中，关注&lt;mx:Button label="Update" click="srv.updateProduct(product)"/&gt;，这里，就是调用srv的updateProduct(product)了，</p>
<p>其中,srv是一个<font face="Verdana">&nbsp;&lt;mx:RemoteObject id="srv" destination="productService"/&gt;</font>,destination="productService"是什么？</p>
<p>就是第１０步中指定的那个productService了，呵呵，应该大致明白了吧？</p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/jackyrong/aggbug/1304007.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42947/" target="_blank">[新闻]开心网即将启用”shejiao.com”?</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>cakephp 学习小结 5</title><link>http://www.cnblogs.com/jackyrong/archive/2008/10/03/1303312.html</link><dc:creator>jackyrong的世界</dc:creator><author>jackyrong的世界</author><pubDate>Fri, 03 Oct 2008 01:19:00 GMT</pubDate><guid>http://www.cnblogs.com/jackyrong/archive/2008/10/03/1303312.html</guid><wfw:comment>http://www.cnblogs.com/jackyrong/comments/1303312.html</wfw:comment><comments>http://www.cnblogs.com/jackyrong/archive/2008/10/03/1303312.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/jackyrong/comments/commentRss/1303312.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jackyrong/services/trackbacks/1303312.html</trackback:ping><description><![CDATA[<p><font face="Verdana">1 页面模版<br />
&nbsp; 来看例子，books_controller.php<br />
&nbsp;&nbsp; &lt;?php<br />
class BooksController extends AppController {<br />
var $name = 'Books';<br />
var $uses = array();<br />
function index() {<br />
$book = array (<br />
'book_title' =&gt; 'Object Oriented Programming<br />
with PHP5',<br />
'author' =&gt; 'Hasin Hayder',<br />
'isbn' =&gt; '1847192564',<br />
'release_date' =&gt; 'December 2007'<br />
);<br />
$this-&gt;set($book);<br />
$this-&gt;pageTitle = 'Welcome to the Packt Book Store!';<br />
}<br />
}<br />
?&gt;<br />
&nbsp; index.thtml<br />
&nbsp; &lt;h2&gt;Book Store&lt;/h2&gt;<br />
&lt;dl&gt;<br />
&lt;dt class="header"&gt;&lt;?php echo $bookTitle; ?&gt;&lt;/dt&gt;<br />
&lt;dt&gt;Author:&lt;/dt&gt;&lt;dd&gt;&lt;?php echo $author; ?&gt;&lt;/dd&gt;<br />
&lt;dt&gt;ISBN:&lt;/dt&gt;&lt;dd&gt;&lt;?php echo $isbn; ?&gt;&lt;/dd&gt;<br />
&lt;dt&gt;Release Date:&lt;/dt&gt;&lt;dd&gt;&lt;?php echo $releaseDate; ?&gt;&lt;/dd&gt;<br />
&lt;/dl&gt;<br />
然后做个default.thtml，放在<br />
&nbsp; app\views\layouts下<br />
&nbsp; &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"<br />
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br />
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;<br />
&lt;?php echo $title_for_layout; ?&gt;<br />
&lt;/title&gt;<br />
&lt;?php echo $html-&gt;css('stylesheet'); ?&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;div id="container"&gt;<br />
&lt;div id="header"&gt;<br />
&lt;h1&gt;&lt;a href="http://www.packtpub.com/"&gt;PACKT PUBLISHING<br />
&lt;/a&gt;&lt;/h1&gt;<br />
&lt;/div&gt;<br />
&lt;div id="content"&gt;<br />
&lt;?php echo $content_for_layout; ?&gt;<br />
&lt;/div&gt;<br />
&lt;div id="footer"&gt;<br />
COPYRIGHT 2008 @ PACKT PUBLISHING<br />
&lt;/div&gt;<br />
&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
&nbsp;&nbsp; 其中&lt;div id="content"&gt;<br />
&lt;?php echo $content_for_layout; ?&gt;<br />
&lt;/div&gt;<br />
&nbsp; 部分就是输出实际内容的部分</font></p>
<p><font face="Verdana">而css，放在app\webroots\css下<br />
&nbsp;</font></p>
<font face="Verdana">
<p><br />
2 创建自定义helper<br />
&nbsp;&nbsp;&nbsp; &lt;?php<br />
class FormatHelper extends AppHelper {<br />
function hyphenateISBN( $isbn ) {<br />
return substr($isbn, 0, 5).'-'.<br />
substr($isbn, 5, 2).'-'.<br />
substr($isbn, 7, 2).'-'.<br />
substr($isbn, 9, 1);<br />
}<br />
function shortenDate( $date ) {<br />
return substr($date, 0, 3).' '.<br />
substr($date, -4);<br />
}<br />
}<br />
?&gt;<br />
&nbsp; 放在app\views\helpers下format.php<br />
在控制器中<br />
&nbsp; var $helpers = array('format');<br />
在模版中<br />
&nbsp;&nbsp; &lt;?php echo $format-&gt;shortenDate($book['release_date']); ?&gt;</p>
<p>3 formhelper<br />
&nbsp; 比如<br />
&nbsp;&nbsp; &lt;?php<br />
echo $form-&gt;create(null, array('url' =&gt; '/books/view', 'type' =&gt;<br />
'post'));<br />
echo $form-&gt;input('Book.book_title', array('type'=&gt;'text'));<br />
echo $form-&gt;input('Book.author', array('type'=&gt;'text'));<br />
echo $form-&gt;input('Book.isbn', array('type'=&gt;'text'));<br />
echo $form-&gt;input('Book.release_date', array('type'=&gt;'date'));<br />
echo $form-&gt;end('Submit');<br />
?&gt;<br />
&nbsp; 其中 &lt;?php<br />
echo $form-&gt;create(null, array('url' =&gt; '/books/view', 'type' =&gt;<br />
'post'));<br />
&nbsp; 产生的就是如下的html<br />
&nbsp; &lt;form action="/interfaces/books/view" method="post"&gt;<br />
&nbsp; <br />
&nbsp; 之后的就是<br />
&nbsp;&nbsp;&nbsp;&nbsp; echo $form-&gt;input('Book.book_title', array('type'=&gt;'text'));<br />
&nbsp;&nbsp; 其实就是产生一个文本框<br />
&nbsp;&nbsp; 而在控制层中，可以通过这样读出提交的数据，就是<br />
&nbsp;&nbsp;&nbsp; $this-&gt;data['Book']['release_date']<br />
&nbsp;&nbsp;&nbsp;&nbsp; 即通过$this-&gt;data[模型名][字段名]读出</p>
<p><br />
</font>&nbsp;</p>
<img src ="http://www.cnblogs.com/jackyrong/aggbug/1303312.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42945/" target="_blank">[新闻]Google股价跌破329美元 61%员工期权价值归零</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>flex 3 学习小结2</title><link>http://www.cnblogs.com/jackyrong/archive/2008/10/02/1303236.html</link><dc:creator>jackyrong的世界</dc:creator><author>jackyrong的世界</author><pubDate>Thu, 02 Oct 2008 13:59:00 GMT</pubDate><guid>http://www.cnblogs.com/jackyrong/archive/2008/10/02/1303236.html</guid><wfw:comment>http://www.cnblogs.com/jackyrong/comments/1303236.html</wfw:comment><comments>http://www.cnblogs.com/jackyrong/archive/2008/10/02/1303236.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/jackyrong/comments/commentRss/1303236.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jackyrong/services/trackbacks/1303236.html</trackback:ping><description><![CDATA[<p><font face="Verdana">1 数据绑定<br />
&nbsp;&nbsp; &nbsp;&lt;mx:Panel title="简单数据绑定" fontSize="13" x="225" y="180" height="138" width="213" verticalAlign="middle" </font></p>
<p><font face="Verdana">horizontalAlign="center"&gt;<br />
&nbsp;&nbsp;&lt;mx:VBox&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;mx:HSlider id="mySlider"/&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;mx:Text text="{mySlider.value}"/&gt;<br />
&nbsp;&nbsp;&lt;/mx:VBox&gt;<br />
&nbsp;&lt;/mx:Panel&gt;<br />
&nbsp; 就是用{}拉</font></p>
<p><font face="Verdana">2 model绑定<br />
&nbsp; &lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="13"&gt;<br />
&nbsp;&lt;mx:Model id="employeemodel"&gt;<br />
&nbsp;&nbsp; &lt;employees&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;employee&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;John Smith&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;department&gt;技术部&lt;/department&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;email&gt;john@163.com&lt;/email&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/employee&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;employee&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;Tom Steve&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;department&gt;人力资源部&lt;/department&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;email&gt;tom@163.com&lt;/email&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/employee&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/employees&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/mx:Model&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;mx:Panel title="使用Model组件"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt;mx:DataGrid dataProvider="{employeemodel.employee}"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:columns&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;mx:DataGridColumn dataField="name" headerText="员工名"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;mx:DataGridColumn dataField="department" headerText="部门"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;mx:DataGridColumn dataField="email" headerText="Email"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/mx:columns&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt;/mx:DataGrid&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/mx:Panel&gt;<br />
&lt;/mx:Application&gt;</font></p>
<p><font face="Verdana">3 使用mx:object来绑定<br />
&nbsp; &lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"&gt;<br />
&nbsp;&lt;mx:Panel title="使用Object组件"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt;mx:DataGrid &gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;mx:dataProvider&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &lt;mx:Object name="John Smith" department="技术部" email="john@163.com"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;mx:Object name="Tom Steve" department="人力资源部" email="tom@163.com"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &lt;mx:Object name="fisher Steve" department="人力资源部" email="fisher@163.com"/&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/mx:dataProvider&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt;/mx:DataGrid&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/mx:Panel&gt;<br />
&lt;/mx:Application&gt;<br />
4 树型列表组件<br />
&nbsp;&nbsp;&nbsp; &lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&nbsp;&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" <br />
&nbsp;&nbsp;&nbsp;&nbsp; fontFamily="simsun" fontSize="12" <br />
&nbsp;&nbsp;&nbsp;&nbsp; layout="absolute"&nbsp; width="242" height="442" &gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:Panel title="使用XML组件"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:Tree id="tree" x="10" y="35" width="218" height="397" showRoot="false" labelField="@label" &gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:dataProvider&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;mx:XML id="XMLData"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &lt;menus&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;node label="Mail"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;node label="Inbox"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;node label="Personal Folder"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;node label="Demo"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;node label="Personal"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;node label="Saved Mail"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;node label="bar"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/node&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;node label="Calendar"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;node label="Sent"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;node label="Trash"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/node&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/menus&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/mx:XML&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/mx:dataProvider&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/mx:Tree&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/mx:Panel&gt;<br />
&nbsp;&lt;/mx:Application&gt;<br />
5 验证<br />
　　&lt;mx:NumberValidator id="numV" source="{txtQQ}" property="text"/&gt;<br />
&nbsp;&nbsp; &lt;mx:Label x="19" y="274" text="QQ"/&gt;<br />
&nbsp; if &amp;numV.validate().type==ValidationResultEvent.VALID<br />
&nbsp; {</font></p>
<p><font face="Verdana">&nbsp; ...//验证通过<br />
}<br />
&nbsp;&nbsp;&nbsp; StringUtil.trim(txtPassword.text)=="",其中 StringUtil.trim用来去掉空格<br />
6&nbsp; 日期格式化<br />
　　&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="13"&gt;<br />
&nbsp; &lt;mx:Script&gt;<br />
&nbsp; &nbsp;&lt;![CDATA[<br />
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; [Bindable]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private var today:Date = new Date();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //获得系统时间，存储在Date类型中<br />
&nbsp; &nbsp;]]&gt;<br />
&nbsp; &lt;/mx:Script&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;!--定义一个日期格式化组件--&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;mx:DateFormatter id="DateDisplay" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; formatString="MMMM D, YYYY"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;mx:Panel width="400" height="200" title="使用DateFormatter组件格式日期" horizontalAlign="left" </font></p>
<p><font face="Verdana">verticalAlign="middle"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt;mx:Label text="未格式化的日期:{today}"/&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt;mx:Label text="格式化后的日期:{DateDisplay.format(today)}"/&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;/mx:Panel&gt;<br />
&lt;/mx:Application&gt;</font></p>
<p><font face="Verdana">&nbsp; <br />
</font></p>
<img src ="http://www.cnblogs.com/jackyrong/aggbug/1303236.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42944/" target="_blank">[新闻]十年祭:昔日明星软件今何在?</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>flex 3学习小结1</title><link>http://www.cnblogs.com/jackyrong/archive/2008/10/02/1303195.html</link><dc:creator>jackyrong的世界</dc:creator><author>jackyrong的世界</author><pubDate>Thu, 02 Oct 2008 11:03:00 GMT</pubDate><guid>http://www.cnblogs.com/jackyrong/archive/2008/10/02/1303195.html</guid><wfw:comment>http://www.cnblogs.com/jackyrong/comments/1303195.html</wfw:comment><comments>http://www.cnblogs.com/jackyrong/archive/2008/10/02/1303195.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/jackyrong/comments/commentRss/1303195.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jackyrong/services/trackbacks/1303195.html</trackback:ping><description><![CDATA[<p><font face="Verdana">flex 3 学习小结1</font></p>
<font face="Verdana">
<p><br />
1 登陆+验证码<br />
&nbsp;&nbsp; &lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()"&gt;<br />
&nbsp;&lt;mx:states&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--新建&#8220;index&#8221;State--&gt;<br />
&nbsp;&nbsp;&lt;mx:State name="index"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--移除&#8220;登录框&#8221;--&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;mx:RemoveChild target="{panel1}"/&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;!--添加新的组件--&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;mx:AddChild position="lastChild"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;mx:Label x="231" y="174" text="欢迎来到主页" fontFamily="Georgia" fontSize="20" /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/mx:AddChild&gt;<br />
&nbsp;&nbsp;&lt;/mx:State&gt;<br />
&nbsp;&lt;/mx:states&gt;<br />
&nbsp;&lt;mx:Script&gt;<br />
&nbsp;&nbsp;&lt;![CDATA[<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; import mx.controls.Alert;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private function initApp():void<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;//显示校验码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lblCheckCode.text=GenerateCheckCode(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;private function loginHandle():void<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;//空的情况<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(txtUsername.text==""||txtPassword.text=="")<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alert.show("请输入完整数据!");<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//合法用户<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if</p>
<p>(txtUsername.text=="Administrator"&amp;&amp;txtPassword.text=="123456"&amp;&amp;txtCheckCode.text.toLocaleLowerCase()</p>
<p>==lblCheckCode.text.toLowerCase())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentState="index";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//登录失败<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//校验码错误<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(txtCheckCode.text.toLowerCase()!=lblCheckCode.text.toLowerCase()) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Alert.show("校验码错误!");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //重新生成校验码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lblCheckCode.text=GenerateCheckCode(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //用户名或密码错误<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Alert.show("用户名或密码错误!");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;private function resetHandle():void<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;txtUsername.text="";<br />
&nbsp;&nbsp;&nbsp;&nbsp;txtPassword.text="";<br />
&nbsp;&nbsp;&nbsp;&nbsp;txtCheckCode.text="";<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //生成随机码<br />
&nbsp;&nbsp;&nbsp;private function GenerateCheckCode():String<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;//初始化<br />
&nbsp;&nbsp;&nbsp;&nbsp;var ran:Number;<br />
&nbsp;&nbsp;&nbsp;&nbsp;var number:Number;<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp; code:String;<br />
&nbsp;&nbsp;&nbsp;&nbsp;var checkCode:String ="";<br />
&nbsp;&nbsp;&nbsp;&nbsp;//生成四位随机数<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(var i:int=0; i&lt;4; i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Math.random生成数为类似为0.1234<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ran=Math.random();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;number =Math.round(ran*10000); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果是2的倍数生成一个数字<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(number % 2 == 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //"0"的ASCII码是48&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; code = String.fromCharCode(48+(number % 10)); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//生成一个字母<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //"A"的ASCII码为65<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; code = String.fromCharCode(65+(number % 26)) ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checkCode += code;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;return checkCode;<br />
&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;]]&gt;<br />
&nbsp;&lt;/mx:Script&gt;<br />
&nbsp;&lt;mx:Panel x="108" y="71" width="349" height="257" layout="absolute" title="用户登录" fontFamily="Georgia" </p>
<p>fontSize="12" id="panel1"&gt;<br />
&nbsp;&nbsp;&lt;!--&nbsp; "用户名"标签&nbsp; --&gt;<br />
&nbsp;&nbsp;&lt;mx:Label x="41.5" y="33" text="用户名"/&gt; <br />
&nbsp;&nbsp;&lt;!--&nbsp; "密码"标签&nbsp; --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;mx:Label x="42.5" y="81" text="密码"/&gt; <br />
&nbsp;&nbsp;&lt;!--&nbsp; "用户名"输入框&nbsp; --&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;mx:TextInput x="94.5" y="33" id="txtUsername"/&gt;&nbsp; <br />
&nbsp;&nbsp;&lt;!--&nbsp; "密码"输入框&nbsp; --&gt;<br />
&nbsp;&nbsp;&lt;mx:TextInput x="95.5" y="81" id="txtPassword" displayAsPassword="true"/&gt;<br />
&nbsp;&nbsp;&lt;!--&nbsp; "登录"按钮&nbsp; --&gt; <br />
&nbsp;&nbsp;&lt;mx:Button x="82.5" y="159" label="登录" id="btnLogin" click="loginHandle()"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--&nbsp; "重置"按钮&nbsp; --&gt; <br />
&nbsp;&nbsp;&lt;mx:Button x="181.5" y="159" label="重置" id="btnReset" click="resetHandle()"/&gt; <br />
&nbsp;&nbsp;&lt;!--&nbsp; "校验码"标签&nbsp; --&gt; <br />
&nbsp;&nbsp;&lt;mx:Label x="165.5" y="125" id="lblCheckCode" width="42.5" color="#377CD0"/&gt;<br />
&nbsp;&nbsp;&lt;mx:LinkButton x="216" y="123" label="看不清楚?" id="linkbtnReGenerate" </p>
<p>click="lblCheckCode.text=GenerateCheckCode();" fontFamily="Georgia" fontSize="11"/&gt;<br />
&nbsp;&nbsp;&lt;mx:Label x="39.5" y="123" text="校验码"/&gt;<br />
&nbsp;&nbsp;&lt;!--&nbsp; "校验码"输入框&nbsp; --&gt; <br />
&nbsp;&nbsp;&lt;mx:TextInput x="96.5" y="121" id="txtCheckCode" width="61" maxChars="4"/&gt;<br />
&nbsp;&lt;/mx:Panel&gt;<br />
&lt;/mx:Application&gt;</p>
<p>&nbsp;&nbsp; 注意,flex 3里,没新窗口的概念,因此有象flash中的state状态的概念,因此在状态面板中可以新建状态state即可,<br />
比如这里建立了index的状态,写下登陆后的主页.并且用<br />
&nbsp;currentState="index";去跳转了.</p>
<p><br />
2 菜单导航<br />
&nbsp;&nbsp; 基本的:<br />
&nbsp;&nbsp;&nbsp; &lt;mx:MenuBar id="myMenuBar" labelField="@id" showRoot="false" width="293" horizontalCenter="0" y="24"&nbsp; </p>
<p>change="menuClickHandle(event)"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:XMLList&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- XMLList标签表示以xml形式存储数据 --&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;menuitem&nbsp; id="Menu1" &gt;&nbsp;&nbsp;&lt;!-- 菜单项，以关系来表示菜单项与子菜单项 --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;menuitem id="SubMenu1" type="radio" groupName="one"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;menuitem id="SubMenu2" type="radio" groupName="one"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/menuitem&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;menuitem id="Menu2" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;menuitem id="Menu3" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;menuitem id="Menu4" &gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;menuitem id="SubMenu3" type="radio" groupName="two"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;menuitem id="SubMenu4" type="radio" groupName="two"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; selected="true"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;menuitem id="SubMenu5" type="radio" groupName="two"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/menuitem&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/mx:XMLList&gt;<br />
还可以切换状态,根据菜单的事件<br />
&nbsp; import mx.events.MenuEvent;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//引用MenuEvent类<br />
&nbsp;&nbsp;&nbsp;private function menuClickHandle(e:MenuEvent):void<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(e.label=="SubMenu1")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//单击</p>
<p>&#8220;SubMenu1&#8221;时切换至&#8220;index1&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentState="index1";<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if(e.label=="SubMenu2")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//单击&#8220;SubMenu2&#8221;时</p>
<p>切换至&#8220;index2&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentState="index2";<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if(e.label=="SubMenu3")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//单击&#8220;SubMenu3&#8221;时</p>
<p>切换至&#8220;index3&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentState="index3";<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if(e.label=="SubMenu4")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//单击&#8220;SubMenu4&#8221;时</p>
<p>切换至&#8220;index4&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentState="index4";<br />
&nbsp;&nbsp;&nbsp;&nbsp;else if(e.label=="SubMenu5")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//单击&#8220;SubMenu5&#8221;时</p>
<p>切换至&#8220;index5&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentState="index5";<br />
&nbsp;&nbsp;&nbsp;}</p>
<p>3&nbsp; 状态效果改变,比如<br />
&nbsp; &lt;mx:transitions&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:Transition id="myTransition1" fromState="*" toState="index1"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:Parallel target="{myVBox1}"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:WipeDown duration="2000"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:Dissolve alphaFrom="0.0" alphaTo="1.0" duration="2000"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/mx:Parallel&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/mx:Transition&gt;<br />
....<br />
&lt;/mx:tranmsitions&gt;<br />
&nbsp;&nbsp; </p>
<p>4 柱型图实例<br />
&nbsp;&nbsp; &lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"&gt;<br />
&nbsp;&lt;mx:Script&gt;&lt;![CDATA[<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; import mx.collections.ArrayCollection;&nbsp;&nbsp;&nbsp;//引用数组类<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Bindable]&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //定义数据集，数据集的内容为每月的收支情况&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public var finance:ArrayCollection = new ArrayCollection([<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {Month:"一月", In:2000, Out:1500},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {Month:"二月", In:1000, Out:200},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {Month:"三月", In:1500, Out:200},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {Month:"四月", In:3500, Out:1000},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {Month:"五月", In:500, Out:800},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {Month:"六月", In:4500, Out:600},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {Month:"七月", In:2500, Out:500},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {Month:"八月", In:1570, Out:300},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {Month:"九月", In:1000, Out:450},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {Month:"十月", In:1500, Out:400},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {Month:"十一月", In:1700, Out:2500},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {Month:"十二月", In:1800, Out:1500},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]);<br />
&nbsp;&nbsp; ]]&gt;&lt;/mx:Script&gt;<br />
&nbsp;&nbsp; &lt;mx:Panel title="柱状图实例"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--Panel容器，标题为&#8220;柱状图实例&#8221;--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--柱状图组件，也称直方图--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:ColumnChart id="myChart" dataProvider="{finance}" &gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--定义横坐标，绑定到&#8220;finance&#8221;数据集中的&#8220;Month&#8221;上--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:horizontalAxis&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:CategoryAxis <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataProvider="{finance}" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; categoryField="Month"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; title="(月份)"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/mx:horizontalAxis&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:series&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--数据以柱的形式表示--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--x轴为月份，y轴表示收入--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:ColumnSeries&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xField="Month" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yField="In" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; displayName="收入"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--x轴为月份，y轴表示支出--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:ColumnSeries &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xField="Month" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yField="Out" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; displayName="支出"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/mx:series&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/mx:ColumnChart&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--Legend组件绑定柱状图中的数据名--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:Legend dataProvider="{myChart}"/&gt;&nbsp;&nbsp;<br />
&nbsp;&nbsp; &lt;/mx:Panel&gt;<br />
&lt;/mx:Application&gt;</p>
<p>&nbsp;&nbsp; 其中&nbsp; &lt;mx:ColumnChart id="myChart" dataProvider="{finance}" &gt;定义数据源.</p>
<p>5 一个air的程序,就是本地的flash程序,读本地机器上的文件<br />
&nbsp;&nbsp; &lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"&gt;<br />
&nbsp;&lt;mx:Script&gt;<br />
&nbsp;&nbsp;&lt;![CDATA[<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;import flash.filesystem.File;&nbsp;&nbsp;//引用File类<br />
&nbsp;&nbsp;]]&gt;<br />
&nbsp;&lt;/mx:Script&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;mx:Panel width="800" height="600"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:VBox&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;mx:HBox&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;!--添加&#8220;FileSystemComboBox&#8221;组件，用以显示和选择文件目录--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&lt;mx:FileSystemComboBox id="filecmb" directory="{filedg.directory}" </p>
<p>directoryChange="filedg.directory=filecmb.directory;"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;!--添加&#8220;Button&#8221;组件，单击按钮实现&#8220;后退&#8221;功能--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:Button id="btnBack" label="后退" click="filedg.directory=filedg.directory.parent"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;/mx:HBox&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;!--添加&#8220;FileSystemDataGrid&#8221;组件，用以显示文件列表--&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt;mx:FileSystemDataGrid id="filedg" width="100%" height="400" directory="{new File('c:/')}"/&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/mx:VBox&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/mx:Panel&gt;<br />
&lt;/mx:WindowedApplication&gt;</p>
<p>6&nbsp; actionscript 3调用javascript<br />
&nbsp;&nbsp; &lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"&nbsp; layout="absolute"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;mx:Script&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;![CDATA[<br />
&nbsp;&nbsp;&nbsp;&nbsp; import flash.external.ExternalInterface;&nbsp;&nbsp;//引用ExternalInterface类<br />
&nbsp;&nbsp;&nbsp;&nbsp; public function invokeJavaScript():void<br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //调用JavaScript中的&#8220;returnTheName&#8221;函数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lblResult.text=ExternalInterface.call("returnTheName",txtName.text);<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; ]]&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/mx:Script&gt;<br />
&nbsp;&nbsp; &lt;mx:Panel&nbsp; width="245" height="130" title="ActionScript调用JavaScript"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:TextInput id="txtName" text="[请输入名字]"/&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp; &lt;mx:Button id="btnConnect" label="确定" click="invokeJavaScript()" x="229" y="204"/&gt;<br />
&nbsp;&nbsp; &lt;mx:Label id="lblResult" text="test" x="205" y="99" width="150" height="80"/&gt;<br />
&nbsp;&nbsp; &lt;/mx:Panel&gt;<br />
&lt;/mx:Application&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; javascript</p>
<p>&nbsp; javascript调用actionscript<br />
&nbsp;&nbsp; &lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"&nbsp; layout="absolute" creationComplete="initApp()"&gt;<br />
&nbsp;&lt;mx:Script&gt;<br />
&nbsp;&nbsp;&lt;![CDATA[<br />
&nbsp;&nbsp;&nbsp;import flash.external.ExternalInterface;&nbsp;//引用ExternelInterface类<br />
&nbsp;&nbsp;&nbsp;//add函数计算从1加到100，并返回结果<br />
&nbsp;&nbsp;&nbsp;public function add():int<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp; var i:int;<br />
&nbsp;&nbsp;&nbsp;&nbsp; var sum:int=0;<br />
&nbsp;&nbsp;&nbsp;&nbsp; for(i=1;i&lt;=100;i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sum+=i;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; return sum;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;public function initApp():void<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp; //声明函数名<br />
&nbsp;&nbsp;&nbsp;&nbsp; ExternalInterface.addCallback("addTo100",add);<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;]]&gt;<br />
&nbsp;&lt;/mx:Script&gt;<br />
&lt;/mx:Application&gt;<br />
&nbsp;&nbsp; 在HTML页中调用javascript时<br />
&nbsp;&nbsp;&nbsp; &lt;button onclick="addMethod()"&gt;xxx&lt;/button&gt;<br />
&nbsp;&nbsp; function addMethod()<br />
&nbsp;{<br />
&nbsp; var s=JavscriptCallActionScript.addtTo100();<br />
&nbsp;..<br />
}</p>
<p>&nbsp; }</p>
<p>&nbsp;</p>
<p></font>&nbsp;</p>
<img src ="http://www.cnblogs.com/jackyrong/aggbug/1303195.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42944/" target="_blank">[新闻]十年祭:昔日明星软件今何在?</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>cakephp 学习4</title><link>http://www.cnblogs.com/jackyrong/archive/2008/10/02/1303105.html</link><dc:creator>jackyrong的世界</dc:creator><author>jackyrong的世界</author><pubDate>Thu, 02 Oct 2008 04:49:00 GMT</pubDate><guid>http://www.cnblogs.com/jackyrong/archive/2008/10/02/1303105.html</guid><wfw:comment>http://www.cnblogs.com/jackyrong/comments/1303105.html</wfw:comment><comments>http://www.cnblogs.com/jackyrong/archive/2008/10/02/1303105.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/jackyrong/comments/commentRss/1303105.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jackyrong/services/trackbacks/1303105.html</trackback:ping><description><![CDATA[&nbsp;
<p><font face="Verdana">1 验证用正则表达式<br />
&nbsp;&nbsp;&nbsp; &lt;?php<br />
class User extends AppModel<br />
{<br />
&nbsp; var $name = 'User'; </font></p>
<p><font face="Verdana">&nbsp; var $validate = array(<br />
&nbsp;&nbsp;&nbsp; 'username' =&gt; '/^.{6,40}$/',<br />
&nbsp;&nbsp;&nbsp; 'password' =&gt; '/^.{6,40}$/',<br />
&nbsp;&nbsp;&nbsp; 'email' =&gt; VALID_EMAIL<br />
&nbsp; );<br />
}<br />
?&gt;<br />
这个正则表达式的意思就是 &#8220;从字符串的开头开始，有至少 6 个但不超过 40 个字符，然后字符串结束&#8221;。<br />
从左至右阅读这个正则表达式：</font></p>
<p><font face="Verdana">/ — 表示正则表达式的开头 <br />
^ — 表示字符串的开头 <br />
. — 表示任意一个字符 <br />
{6,40} — 表示至少 6 次，但不能超过 40 次 <br />
$ — 表示字符串结束 <br />
/ — 表示正则表达式结束</font></p>
<p><font face="Verdana">2 在数据进入数据库前，先判断是否重复输入<br />
在model层中输入</font></p>
<p><font face="Verdana">function beforeValidate() {<br />
&nbsp;&nbsp;&nbsp; if (!$this-&gt;id) {<br />
if ($this-&gt;findCount(array('User.username' <br />
&nbsp;&nbsp;=&gt; $this-&gt;data['User']['username'])) &gt; 0) {<br />
$this-&gt;invalidate('username_unique');<br />
return false;<br />
}<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return true;<br />
}<br />
&nbsp;并且在view层中给出信息<br />
&nbsp;&nbsp;&nbsp; echo $form-&gt;input('username', array('after' =&gt; $form-&gt;error<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ('username_unique', 'The username is taken. Please try again.')));</font></p>
<p><font face="Verdana"></font>&nbsp;</p>
<p><font face="Verdana">&nbsp;&nbsp; 这个方法告诉模型，在运行任何检验之前，应该检查提交的数据是否有 ID。如果没有 ID，就寻找用户名相同的其他用户。如果</font></p>
<p><font face="Verdana">找到这样的用户，就将用户名字段标为无效，并跳过其他检验（返回 false）。通过将 register.ctp 视图中的用户名输入行改为清</font></p>
<p><font face="Verdana">单 24 所示的代码，就可以启用这个功能。</font></p>
<font face="Verdana">
<p><br />
2&nbsp; 用bake来生成框架<br />
&nbsp;&nbsp; 注意必须建立好model层后再用！<br />
&nbsp;把cake\console以及php目录底下的php.exe所在的路径加到path中去。之后在app目录下运行<br />
cake bake即可一步步去做control层，view层的crud.</p>
<p><br />
3<br />
&nbsp; 一对多的例子：<br />
&nbsp; authors,books表中，一对多的关系<br />
author.php中<br />
&nbsp;&nbsp; &lt;?php<br />
class Author extends AppModel<br />
{<br />
&nbsp;var $name = 'Author';<br />
var $hasMany = array ('Book' =&gt; array(<br />
'className' =&gt; 'Book','foreignKey'=&gt;'author_id')<br />
&nbsp;&nbsp;&nbsp; );<br />
&nbsp; }<br />
?&gt;<br />
book.php表<br />
&nbsp; &lt;?php<br />
class Book extends AppModel<br />
{ var $name = 'Book';<br />
&nbsp;var $belongsTo = array ('Author' =&gt; array(<br />
'className' =&gt; 'Author','foreignKey'=&gt;'author_id')<br />
&nbsp;&nbsp;&nbsp; );<br />
}<br />
?&gt;<br />
然后假设authors表中已有数据<br />
books_controller.php:<br />
&nbsp;&lt;?php<br />
class BooksController extends AppController {<br />
var $name = 'Books';<br />
var $scaffold;<br />
}<br />
&nbsp; 其中在录入book表时，应该会有authors的下拉框供选择。</p>
<p>&nbsp;一对多中，一方如果和多个多方有关联，可以这样写：<br />
&nbsp; var $hasMany = array(<br />
'Book' =&gt; array(<br />
'className' =&gt; 'Book',<br />
),<br />
'Tutorial' =&gt; array(<br />
'className' =&gt; 'Tutorial',<br />
)<br />
);</p>
<p>4 一对多的最终例子<br />
&nbsp;&nbsp; model层<br />
&nbsp;&nbsp; book.php:<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;?php<br />
class Book extends AppModel<br />
{ var $name = 'Book';<br />
&nbsp;var $belongsTo = array ('Author' =&gt; array(<br />
'className' =&gt; 'Author','foreignKey'=&gt;'author_id')<br />
&nbsp;&nbsp;&nbsp; );<br />
}<br />
?&gt;<br />
&nbsp;&nbsp; author.php<br />
&nbsp;&nbsp;&nbsp; &lt;?php<br />
class Author extends AppModel<br />
{<br />
&nbsp;var $name = 'Author';<br />
var $hasMany = array ('Book' =&gt; array(<br />
'className' =&gt; 'Book','foreignKey'=&gt;'author_id')<br />
&nbsp;&nbsp;&nbsp; );<br />
&nbsp; <br />
}<br />
?&gt;</p>
<p>&nbsp; 控制层 books_controller.php<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;?php<br />
class BooksController extends AppController {<br />
var $name = 'Books';<br />
var $helpers = array('Form');<br />
function index() {<br />
$this-&gt;Book-&gt;recursive = 1;<br />
$books = $this-&gt;Book-&gt;find('all',<br />
array('fields' =&gt;<br />
array('Book.isbn','Book.title','Author.name')<br />
)<br />
);<br />
$this-&gt;set('books',$books);<br />
}<br />
function add() {<br />
if (!empty($this-&gt;data)) {<br />
$this-&gt;Book-&gt;create();<br />
$this-&gt;Book-&gt;save($this-&gt;data);<br />
$this-&gt;redirect(array('action'=&gt;'index'));<br />
}<br />
//注意在1.2中，不用helper类的generalist了。用find<br />
$authors =$this-&gt;Book-&gt;Author-&gt;find('list',array('fields'=&gt;'Author.name'));<br />
$this-&gt;set('authors',$authors);<br />
}<br />
}<br />
?&gt;<br />
&nbsp;&nbsp;&nbsp; authors_controller.php<br />
&nbsp; &lt;?php<br />
class AuthorsController extends AppController {<br />
var $name = 'Authors';<br />
function index() {<br />
$this-&gt;Author-&gt;recursive = 1;<br />
$authors = $this-&gt;Author-&gt;find('all');<br />
$this-&gt;set('authors', $authors);<br />
}<br />
}<br />
?&gt;<br />
&nbsp; view层<br />
&nbsp;&nbsp; views\authors\index.thtml<br />
&nbsp;&nbsp; &lt;?php foreach($authors as $author): ?&gt;<br />
&lt;h2&gt;&lt;?php echo $author['Author']['name'] ?&gt;&lt;/h2&gt;<br />
&lt;hr /&gt;<br />
&lt;h3&gt;Book(s):&lt;/h3&gt;<br />
&lt;ul&gt;<br />
&lt;?php foreach($author['Book'] as $book): ?&gt;<br />
&lt;li&gt;&lt;?php echo $book['title'] ?&gt;&lt;/li&gt;<br />
&lt;?php endforeach; ?&gt;<br />
&lt;/ul&gt;<br />
&lt;?php endforeach; ?&gt;</p>
<p>&nbsp;&nbsp;&nbsp; views\books\index.thtml<br />
&nbsp;&nbsp; &lt;table&gt;<br />
&lt;thead&gt;<br />
&lt;th&gt;ISBN&lt;/th&gt;&lt;th&gt;Title&lt;/th&gt;&lt;th&gt;Author&lt;/th&gt;<br />
&lt;/thead&gt;<br />
&lt;?php foreach($books as $book): ?&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;&lt;?php echo $book['Book']['isbn'] ?&gt;&lt;/td&gt;<br />
&lt;td&gt;&lt;?php echo $book['Book']['title'] ?&gt;&lt;/td&gt;<br />
&lt;td&gt;&lt;?php echo $book['Author']['name'] ?&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;?php endforeach; ?&gt;<br />
&lt;/table&gt;</p>
<p>&nbsp; views\books\add.thtml<br />
&nbsp;&nbsp; &lt;?php echo $form-&gt;create('Book');?&gt;<br />
&lt;fieldset&gt;<br />
&lt;legend&gt;Add New Book&lt;/legend&gt;<br />
&lt;?php<br />
echo $form-&gt;input('isbn');<br />
echo $form-&gt;input('title');<br />
echo $form-&gt;input('description');<br />
echo $form-&gt;input('author_id');<br />
?&gt;<br />
&lt;/fieldset&gt;<br />
&lt;?php echo $form-&gt;end('Submit');?&gt;</p>
<p><br />
5 一对多中，删除一方时，如果要级联删除多方，这样设置<br />
&nbsp; var $hasMany = array(<br />
'Book' =&gt; array(<br />
'className' =&gt; 'Book',<br />
'dependent'=&gt; true<br />
)<br />
);</p>
<p>6 多对多,假设book和author关系为多对多<br />
&nbsp;&nbsp; model层<br />
&nbsp;&nbsp;&nbsp; book.php<br />
&nbsp;&nbsp; &lt;?php<br />
class Book extends AppModel<br />
{<br />
var $name = 'Book';<br />
var $hasAndBelongsToMany = 'Author';<br />
}<br />
?&gt;<br />
&nbsp;&nbsp;&nbsp; author.php<br />
　　&lt;?php<br />
class Author extends AppModel<br />
{<br />
var $name = 'Author';<br />
var $hasAndBelongsToMany = 'Book';<br />
}<br />
?&gt;</p>
<p>　controll层<br />
　　books_controller.php<br />
&nbsp;&nbsp;&nbsp; &lt;?php<br />
class BooksController extends AppController {<br />
var $name = 'Books';<br />
var $helpers = array( 'Form' );<br />
function index() {<br />
$this-&gt;Book-&gt;recursive = 1;<br />
$books = $this-&gt;Book-&gt;find('all');<br />
$this-&gt;set('books', $books);<br />
}<br />
function add() {<br />
if (!empty($this-&gt;data)) {<br />
$this-&gt;Book-&gt;create();<br />
$this-&gt;Book-&gt;save($this-&gt;data);<br />
$this-&gt;redirect(array('action'=&gt;'index'), null, true);<br />
}<br />
$authors =$this-&gt;Book-&gt;Author-&gt;find('list',array('fields'=&gt;'Author.name'));<br />
$this-&gt;set('authors', $authors);<br />
}<br />
}<br />
?&gt;<br />
&nbsp;&nbsp; authors_controller.php<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;?php<br />
class AuthorsController extends AppController {<br />
var $name = 'Authors';<br />
function index() {<br />
$this-&gt;Author-&gt;recursive = 1;<br />
$authors = $this-&gt;Author-&gt;find('all');<br />
$this-&gt;set('authors', $authors);<br />
}<br />
}<br />
?&gt;</p>
<p>&nbsp;view层<br />
　　view\book\index.thtml<br />
&nbsp;&nbsp; &lt;?php foreach($books as $book): ?&gt;<br />
&lt;h2&gt;&lt;?php echo $book['Book']['title'] ?&gt;&lt;/h2&gt;<br />
&lt;hr /&gt;<br />
&lt;h3&gt;Author(s):&lt;/h3&gt;<br />
&lt;ul&gt;<br />
&lt;?php foreach($book['Author'] as $author): ?&gt;<br />
&lt;li&gt;&lt;?php echo $author['name'] ?&gt;&lt;/li&gt;<br />
&lt;?php endforeach; ?&gt;<br />
&lt;/ul&gt;<br />
&lt;?php endforeach; ?&gt;</p>
<p>&nbsp;&nbsp; view\author\index.thtml<br />
&nbsp; &lt;?php foreach($authors as $author): ?&gt;<br />
&lt;h2&gt;&lt;?php echo $author['Author']['name'] ?&gt;&lt;/h2&gt;<br />
&lt;hr /&gt;<br />
&lt;h3&gt;Book(s):&lt;/h3&gt;<br />
&lt;ul&gt;<br />
&lt;?php foreach($author['Book'] as $book): ?&gt;<br />
&lt;li&gt;&lt;?php echo $book['title'] ?&gt;&lt;/li&gt;<br />
&lt;?php endforeach; ?&gt;<br />
&lt;/ul&gt;<br />
&lt;?php endforeach; ?&gt;</p>
<p>&nbsp; view\books\add.thtml<br />
&nbsp; &lt;?php echo $form-&gt;create('Book');?&gt;<br />
&lt;fieldset&gt;<br />
&lt;legend&gt;Add New Book&lt;/legend&gt;<br />
&lt;?php<br />
echo $form-&gt;input('isbn');<br />
echo $form-&gt;input('title');<br />
echo $form-&gt;input('description');<br />
echo $form-&gt;input('Author');<br />
?&gt;<br />
&lt;/fieldset&gt;<br />
&lt;?php echo $form-&gt;end('Submit');?&gt;</font></p>
<img src ="http://www.cnblogs.com/jackyrong/aggbug/1303105.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42944/" target="_blank">[新闻]十年祭:昔日明星软件今何在?</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>ejb3+weblogic 10的一些小结</title><link>http://www.cnblogs.com/jackyrong/archive/2008/09/30/1302663.html</link><dc:creator>jackyrong的世界</dc:creator><author>jackyrong的世界</author><pubDate>Tue, 30 Sep 2008 14:33:00 GMT</pubDate><guid>http://www.cnblogs.com/jackyrong/archive/2008/09/30/1302663.html</guid><wfw:comment>http://www.cnblogs.com/jackyrong/comments/1302663.html</wfw:comment><comments>http://www.cnblogs.com/jackyrong/archive/2008/09/30/1302663.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/jackyrong/comments/commentRss/1302663.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jackyrong/services/trackbacks/1302663.html</trackback:ping><description><![CDATA[<p>&nbsp; 一个helloworld的例子,以及讲明如何用ant去打包以及其脚本.</p>
<p>首先是程序<br />
</p>
<p><font face="Verdana">package com.liao;</font></p>
<p><font face="Verdana">public interface HelloWorld {<br />
&nbsp;&nbsp;&nbsp; public String SayHello(String name);<br />
}<br />
</p>
<p><font face="Verdana">package liao;</font></p>
<p><font face="Verdana">public interface HelloWorldLocal extends HelloWorld{</font></p>
<p><font face="Verdana">}</font></p>
<p><font face="Verdana"></font>&nbsp;</p>
<p><font face="Verdana">&nbsp;</p>
<p><br />
</p>
<p><font face="Verdana">package com.liao.impl;</font></p>
<p><font face="Verdana">import com.liao.HelloWorld;<br />
import com.liao.HelloWorldLocal;</font></p>
<p><font face="Verdana">import javax.ejb.Local;<br />
import javax.ejb.Remote;<br />
import javax.ejb.Stateless;</font></p>
<p><font face="Verdana">@Stateless(mappedName="HelloWorldBean")<br />
@Remote (HelloWorld.class)<br />
@Local (HelloWorldLocal.class)<br />
public class HelloWorldBean implements HelloWorld, HelloWorldLocal {</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; public String SayHello(String name) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return name +"说：你好!?";<br />
&nbsp;&nbsp;&nbsp; }</font></p>
<p><font face="Verdana">}</font></p>
<p><font face="Verdana">web部分的测试jsp:<br />
&nbsp;<font face="Verdana">&lt;%@ page contentType="text/html; charset=GBK"%&gt;<br />
&lt;%@ page import="com.foshanshop.ejb3.*, javax.naming.*"%&gt;<br />
&lt;%<br />
&nbsp;try {&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InitialContext ctx = new InitialContext();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HelloWorldLocal local = (HelloWorldLocal) ctx.lookup("java:comp/env/ejb/HelloWorldLocal");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println(local.SayHello("test"));<br />
&nbsp;} catch (Exception e) {<br />
&nbsp;&nbsp;out.println(e.getMessage());<br />
&nbsp;}<br />
%&gt;<br />
</font></font></p>
<p><font face="Verdana">web.xml:<br />
&nbsp; <font face="Verdana">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"&gt;<br />
&nbsp;&nbsp; &lt;description&gt;foshanshop ejb3.0 Sample&lt;/description&gt;<br />
&nbsp;&nbsp; <br />
&nbsp; &lt;ejb-local-ref&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;ejb-ref-name&gt;ejb/HelloWorldLocal&lt;/ejb-ref-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;ejb-ref-type&gt;Session&lt;/ejb-ref-type&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;local&gt;com.foshanshop.ejb3.HelloWorldLocal&lt;/local&gt;<br />
&nbsp;&lt;!-- 如果一个EAR文件中存在多个EJB jar,而这些jar分别含有相同名称的EJB时，<br />
&nbsp;&nbsp;&nbsp; &nbsp;应在EJB名称前加上jar文件名和#号，如：HelloWorld.jar#HelloWorldBean --&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;ejb-link&gt;HelloWorldBean&lt;/ejb-link&gt;<br />
&nbsp; &lt;/ejb-local-ref&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;welcome-file-list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;Test.jsp&lt;/welcome-file&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; &lt;/welcome-file-list&gt; <br />
&lt;/web-app&gt;<br />
</font></font></p>
<p><font face="Verdana">&nbsp;当ejb模块和web一起打包成.ear时,要在meta-inf下放application.xml</font></p>
<p><font face="Verdana"><font face="Verdana">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;application xmlns="http://java.sun.com/xml/ns/javaee"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; version="5"&gt;<br />
&nbsp;&lt;display-name&gt;EJB3 Sample Application&lt;/display-name&gt;<br />
&nbsp;&lt;module&gt;<br />
&nbsp;&nbsp;&lt;web&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;web-uri&gt;HelloWorld.war&lt;/web-uri&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;context-root&gt;HelloWorld&lt;/context-root&gt;<br />
&nbsp;&nbsp;&lt;/web&gt;<br />
&nbsp;&lt;/module&gt;&nbsp;<br />
&nbsp;&lt;module&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;ejb&gt;HelloWorld.jar&lt;/ejb&gt;<br />
&nbsp;&lt;/module&gt;&nbsp;<br />
&lt;/application&gt;<br />
</font></font></p>
<p><font face="Verdana">ant的配置文件:</font></p>
<p><font face="Verdana">&nbsp;&nbsp; </p>
<p><font face="Verdana">&lt;?xml version="1.0"?&gt;<br />
&lt;!-- ======================================================================= --&gt;<br />
&lt;!-- EJB3 WeblogicHelloWorld build file&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br />
&lt;!-- ======================================================================= --&gt;<br />
&lt;project name="WeblogicHelloWorld" default="ear" basedir=".."&gt;<br />
&nbsp;&lt;property name="app.dir" value="${basedir}\WeblogicHelloWorld" /&gt;<br />
&nbsp;&lt;property name="src.dir" value="${app.dir}\src" /&gt;<br />
&nbsp;&lt;property name="weblogic.home" value="C:\bea\wlserver_10.3"&nbsp; description="weblogic产品所在目录,本书安装在C:\bea\wlserver_10.3"/&gt;<br />
&nbsp;&lt;property name="wls.username" value="weblogic" description="登录用户名,默认为weblogic"/&gt;<br />
&nbsp;&lt;property name="wls.password" value="weblogic" description="登录密码,默认为weblogic"/&gt;<br />
&nbsp;&lt;property name="wls.hostname" value="localhost" description="主机名称"/&gt;<br />
&nbsp;&lt;property name="wls.port" value="7001" description="所在端口,默认为7001"/&gt;<br />
&nbsp;&lt;property name="wls.server.name" value="examplesServer" description="weblogic中的目标服务器,默认为examplesServer"/&gt;<br />
&nbsp;&lt;property name="build.dir" value="${app.dir}\build" /&gt;<br />
&nbsp;&lt;property name="build.classes.dir" value="${build.dir}\classes" /&gt;<br />
&nbsp;&lt;!-- Build classpath --&gt;<br />
&nbsp;&lt;path id="build.classpath"&gt;<br />
&nbsp;&nbsp;&lt;fileset dir="${basedir}\lib\javaee"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;include name="*.jar" /&gt;<br />
&nbsp;&nbsp;&lt;/fileset&gt;<br />
&nbsp;&nbsp;&lt;fileset dir="${weblogic.home}\server\lib"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;include name="weblogic.jar" /&gt;<br />
&nbsp;&nbsp;&lt;/fileset&gt;<br />
&nbsp;&nbsp;&lt;pathelement location="${build.classes.dir}" /&gt;<br />
&nbsp;&lt;/path&gt;<br />
&nbsp;&lt;!-- 定义一个Ant任务标签 --&gt;<br />
&nbsp;&lt;taskdef name="wldeploy" classname="weblogic.ant.taskdefs.management.WLDeploy" classpathref="build.classpath"/&gt;<br />
&nbsp;&lt;!-- =================================================================== --&gt;<br />
&nbsp;&lt;!-- Prepares the build directory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br />
&nbsp;&lt;!-- =================================================================== --&gt;<br />
&nbsp;&lt;target name="prepare" depends="clean"&gt;<br />
&nbsp;&nbsp;&lt;mkdir dir="${build.dir}" /&gt;<br />
&nbsp;&nbsp;&lt;mkdir dir="${build.classes.dir}" /&gt;<br />
&nbsp;&lt;/target&gt;</font></p>
<p><font face="Verdana">&nbsp;&lt;!-- =================================================================== --&gt;<br />
&nbsp;&lt;!-- Compiles the source code&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br />
&nbsp;&lt;!-- =================================================================== --&gt;<br />
&nbsp;&lt;target name="compile" depends="prepare" description="编绎"&gt;<br />
&nbsp;&nbsp;&lt;javac srcdir="${src.dir}" destdir="${build.classes.dir}" debug="on" deprecation="on" optimize="off" includes="com/**"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;classpath refid="build.classpath" /&gt;<br />
&nbsp;&nbsp;&lt;/javac&gt;<br />
&nbsp;&lt;/target&gt;</font></p>
<p><font face="Verdana">&nbsp;&lt;target name="ear" depends="compile" description="创建JavaEE发布包"&gt;<br />
&nbsp;&nbsp;&lt;jar jarfile="${app.dir}\HelloWorld.jar"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;fileset dir="${build.classes.dir}"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="com/**/*.class" /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/fileset&gt;<br />
&nbsp;&nbsp;&lt;/jar&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;war warfile="${app.dir}\HelloWorld.war" webxml="${app.dir}\web\WEB-INF\web.xml"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${app.dir}/web"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="*.*"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/war&gt;<br />
&nbsp;&nbsp;&lt;ear earfile="${app.dir}\HelloWorld.ear" appxml="${app.dir}\META-INF\application.xml"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;fileset dir="${app.dir}"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="HelloWorld.jar"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;include name="HelloWorld.war"/&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/fileset&gt;<br />
&nbsp;&nbsp;&lt;/ear&gt;<br />
&nbsp;&nbsp;&lt;delete file="${app.dir}\HelloWorld.jar" /&gt;<br />
&nbsp;&nbsp;&lt;delete file="${app.dir}\HelloWorld.war" /&gt;<br />
&nbsp;&lt;/target&gt;<br />
&nbsp;&lt;!-- =================================================================== --&gt;<br />
&nbsp;&lt;!-- 需要先启动weblogic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br />
&nbsp;&lt;!-- =================================================================== --&gt;<br />
&nbsp;&lt;target name="deploy" depends="undeploy,ear" description="把应用发布到weblogic，部署名称为HelloWorld，你不再需要手工部署"&gt;<br />
&nbsp;&nbsp;&lt;wldeploy action="deploy" name="HelloWorld"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; source="${app.dir}\HelloWorld.ear" targets="${wls.server.name}"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user="${wls.username}" password="${wls.password}"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adminurl="t3://${wls.hostname}:${wls.port}"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug="true" verbose="true" failonerror="true"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;echo message="你可以通过http://${wls.hostname}:${wls.port}/HelloWorld/Test.jsp调用EJB"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;echo message="或者通过单元测试用例HelloWorldTest调用EJB,需要使用JDK1.6，并且把[weblogic home]\wlserver_10.3\server\lib\weblogic.jar加入到类路径下"/&gt;<br />
&nbsp;&lt;/target&gt;</font></p>
<p><font face="Verdana">&nbsp;&lt;target name="undeploy" description="卸载部署名称为HelloWorld的应用"&gt;<br />
&nbsp;&nbsp;&lt;wldeploy action="undeploy" name="HelloWorld" targets="${wls.server.name}"<br />
&nbsp;&nbsp;&nbsp;user="${wls.username}" password="${wls.password}"<br />
&nbsp;&nbsp;&nbsp;adminurl="t3://${wls.hostname}:${wls.port}"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug="false" verbose="false" failonerror="false" /&gt;<br />
&nbsp;&lt;/target&gt;<br />
&nbsp;<br />
&nbsp;&lt;!-- =================================================================== --&gt;<br />
&nbsp;&lt;!-- Cleans up generated stuff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br />
&nbsp;&lt;!-- =================================================================== --&gt;<br />
&nbsp;&lt;target name="clean"&gt;<br />
&nbsp;&nbsp;&lt;delete dir="${build.dir}" /&gt;<br />
&nbsp;&lt;/target&gt;<br />
&lt;/project&gt;</font></p>
<p><font face="Verdana"></font>&nbsp;</p>
<p>而如果用J2SE的测试文件:</p>
<p>&nbsp; </p>
<p><font face="Verdana">package junit.test;</font></p>
<p><font face="Verdana">import java.util.Properties;</font></p>
<p><font face="Verdana">import javax.naming.Context;<br />
import javax.naming.InitialContext;<br />
import javax.naming.NamingException;</font></p>
<p><font face="Verdana">import org.junit.Test;</font></p>
<p><font face="Verdana">import com.liao.HelloWorld;<br />
/**<br />
&nbsp;* 执行该用例，你需要JDK1.6以上版本，并且需要把[weblogic home]\wlserver_10.3\server\lib\weblogic.jar加入到类路径下<br />
&nbsp;* @author lihuoming<br />
&nbsp;*<br />
&nbsp;*/<br />
public class HelloWorldTest {<br />
&nbsp;<br />
&nbsp;@Test<br />
&nbsp;public void testSayHello() {<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp; Properties props = new Properties();<br />
&nbsp;&nbsp;&nbsp; props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");<br />
&nbsp;&nbsp;&nbsp; props.setProperty(Context.PROVIDER_URL, "t3://localhost:7001");<br />
&nbsp;&nbsp;&nbsp; InitialContext ctx = new InitialContext(props);<br />
&nbsp;&nbsp;&nbsp; HelloWorld remote = (HelloWorld) ctx.lookup("HelloWorldBean#"+ HelloWorld.class.getName());<br />
&nbsp;&nbsp;&nbsp; System.out.println(remote.SayHello("test"));<br />
&nbsp;&nbsp;} catch (NamingException e) {<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;}<br />
&nbsp;}</font></p>
<p><font face="Verdana">}</font></p>
<p><br />
&nbsp;</p>
</font></font></font>
<img src ="http://www.cnblogs.com/jackyrong/aggbug/1302663.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42943/" target="_blank">[新闻]六大可能出售IT企业名单：SUN领头或被猎走</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>struts2 中一个值得参考的小地方</title><link>http://www.cnblogs.com/jackyrong/archive/2008/09/30/1302556.html</link><dc:creator>jackyrong的世界</dc:creator><author>jackyrong的世界</author><pubDate>Tue, 30 Sep 2008 10:26:00 GMT</pubDate><guid>http://www.cnblogs.com/jackyrong/archive/2008/09/30/1302556.html</guid><wfw:comment>http://www.cnblogs.com/jackyrong/comments/1302556.html</wfw:comment><comments>http://www.cnblogs.com/jackyrong/archive/2008/09/30/1302556.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/jackyrong/comments/commentRss/1302556.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jackyrong/services/trackbacks/1302556.html</trackback:ping><description><![CDATA[<p>&nbsp; 在struts2中,今天看到一个简单的做权限的方法,小结如下,也就是最传统的角色的做法,比如:<br />
1 定义各个菜单项的编码,<br />
&nbsp;&nbsp; <font face="Verdana">&lt;s:set name="ADBANNER_CREAT" value="101"/&gt;<br />
&lt;s:set name="ADBANNER_UPDATE" value="102"/&gt;<br />
&lt;s:set name="ADBANNER_DELETE" value="103"/&gt;<br />
&lt;s:set name="ADBANNER_LOOK" value="104"/&gt;<br />
<font face="Verdana">&lt;s:set name="ADVERTISMENT_CREAT" value="201"/&gt;<br />
&lt;s:set name="ADVERTISMENT_UPDATE" value="202"/&gt;<br />
&lt;s:set name="ADVERTISMENT_DELETE" value="203"/&gt;</font></font></p>
<p>&nbsp;如此类推</p>
<p>2 之后将每个用户的角色保存起来,比如userid=1的角色可以为101,203,202</p>
<p>3 在调用每个菜单项的时候,这样判断,<br />
&nbsp;&nbsp; <font face="Verdana">&nbsp;&lt;s:if test="@com.kemp.util.confighand@handleValidate('30',#session.rolecontent) == 1"&gt;<br />
&nbsp;&nbsp; p = new createPanel('adveradmin','客户管理');</font></p>
<p>.........</p>
<p>&nbsp;这里注意&lt;s:if test="@com.kemp.util.confighand@handleValidate('30',#session.rolecontent) == 1"&gt;的写法哦</p>
<p>&nbsp; 这里将之前用户登陆后,提取数据库中的一长串101,203,202,放到rolecontent的session中去了.之后调用<br />
com.kemp.util.confighand类中的handleValidate方法去判断,判断当前用户的权限中是否包含30系列的权限，如果等于1的话，则继续做下面的事情.</p>
<p><font face="Verdana">&nbsp;/**<br />
&nbsp;&nbsp;&nbsp; * 判断allconstant中是否有constant中指定的权限<br />
&nbsp;&nbsp;&nbsp; * @param constant 表示某个特定的权限<br />
&nbsp;&nbsp;&nbsp; * @param allConstant　表示有某用户目前有的权限，用,隔开<br />
&nbsp;&nbsp;&nbsp; * @return<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp; public static int handleValidate(String constant, String allConstant){<br />
&nbsp;&nbsp;&nbsp; int flag = 0;<br />
&nbsp;&nbsp;&nbsp; String con[] = allConstant.split(",");<br />
&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;con.length;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp; if(con[i].startsWith(constant)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flag = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return flag;<br />
&nbsp;&nbsp; }</font></p>
<img src ="http://www.cnblogs.com/jackyrong/aggbug/1302556.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42943/" target="_blank">[新闻]六大可能出售IT企业名单：SUN领头或被猎走</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item></channel></rss>