<a href="http://my.oschina.net/tinyframework/blog/349383#">?</a>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<code>@controller</code><code>()</code>
<code>public</code> <code>class</code> <code>helloaction</code><code>implements</code> <code>webcontextaware{</code>
<code> </code><code>private</code> <code>webcontext webcontext;</code>
<code> </code>
<code> </code><code>public</code> <code>void</code> <code>setcontext(webcontext webcontext) {</code>
<code> </code><code>this</code><code>.webcontext = webcontext;</code>
<code> </code><code>}</code>
<code> </code><code>@requestmapping</code><code>(value={</code><code>"/hellobymvc.do"</code><code>})</code>
<code> </code><code>@view</code><code>(value=</code><code>"/helloworld/helloresult.page"</code><code>)</code>
<code> </code><code>public</code> <code>void</code> <code>sayhellomethod(string name) {</code>
<code> </code><code>if</code> <code>(name ==</code><code>null</code><code>) {</code>
<code> </code><code>name =</code><code>"world"</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code>webcontext.put(</code><code>"result"</code><code>, string.format(</code><code>"hello, %s"</code><code>, name));</code>
<code>}</code>
解釋
@controller()表示這個類是個控制層的類。
implements webcontextaware表示,這個要類要注入web 上下文對象。
@requestmapping(value={"/hellobymvc.do"})表示響應/hellobymvc.do請求,注意,這個可以有多個值。
@view(value="/helloworld/helloresult.page")表示執行完畢之後轉到/helloworld/helloresult.page頁面進行渲染。
webcontext,也就是web上下文,是tiny web架構中的一個重要類,用于在上面放置各種資料。
你可以把它了解成像map一樣的東西,可以不斷的往裡面塞東西,塞進去的,在展現層就是可見的。
當然,對于上面這麼簡單的類子,其實不用實作webcontextaware接口,這個時候的寫法如下:
<code>public</code> <code>class</code> <code>helloaction {</code>
<code> </code><code>@resultkey</code><code>(value =</code><code>"result"</code><code>)</code>
<code> </code><code>@requestmapping</code><code>(value={</code><code>"/hellobymvc.do"</code><code>})</code>
<code> </code><code>@view</code><code>(value=</code><code>"/helloworld/helloresult.page"</code><code>)</code>
<code> </code><code>public</code> <code>string sayhellomethod(string name) {</code>
<code> </code><code>if</code> <code>(name ==</code><code>null</code><code>) {</code>
<code> </code><code>name =</code><code>"world"</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code>return</code> <code>string.format(</code><code>"hello, %s"</code><code>, name);</code>
相對來說,比上面一種寫法更簡單,但是唯一的限制就是隻能傳回一個對象了。
<code>@resultkey</code><code>(value=</code><code>"users"</code><code>)</code>
<code>@requestmapping</code><code>(value={</code><code>"/crud/service/tinydb/list.page"</code><code>})</code>
<code>public</code> <code>list<bean> queryusers(</code><code>@serviceparameter</code><code>(name =</code><code>"tuser"</code><code>) bean tuser)</code><code>throws</code> <code>exception {</code>
<code> </code><code>bean[] beans = operator.getbeans(tuser);</code>
<code> </code><code>if</code> <code>(beans !=</code><code>null</code><code>) {</code>
<code> </code><code>return</code> <code>arrays.aslist(beans);</code>
<code> </code><code>return</code> <code>null</code><code>;</code>
當然,入參也不一定必須是簡單類型,對象也是允許的。
通過注解方式,可以友善的在普通的java類中定義控制層的處理邏輯,步驟:
在類上增加@controller注解
在方法上增加@requestmapping注解
如果有傳回值,可以通過注入webcontext對象來傳回,也可以通過@resultkey注解完成,但是@resultkey隻能把方法的傳回值用指定key放入上下文。
問題:如果控制層處理方法需要的是一個對象,如果辦呢?
如果符合tiny架構之命名規範,是以有的一切由架構幫你自動搞定
如果不符合tiny架構之命名規範,請注入webcontext對象,自己進行組裝
當然,helloworld的功能太簡單了,它甚至可以直接在控制層就完成了。
雖然這麼做從計算機邏輯上來說是沒有問題的,也會給出正确的結果,但是實際應用當中,這麼做就是有問題的,因為業務邏輯是不應該在控制層完成的。
是以,上面的做法是錯誤的,也是不推薦的。
是以正确的是編寫一個業務流:
上面編寫了流程處理,然後就可以編寫寫頁面流了:
當然,它也不一定都是一條線的,也可以是複雜的,比如:
頁面流這裡隻要調用一個服務就可以,由于調用完服務,服務的結果會自動放在上下文當中,是以預設是不需要進行任何附加處理的。
通過頁面流的方式,有非常清晰的頁面處理邏輯展示,更容易了解業務的處理過程。由于不用寫程式,不必擔心程式員在裡面添加一些危險代碼(在某些特殊行業這個是要嚴格防止的),流程即文檔,可以快速生成文檔。
tiny架構中已經原生有了許多頁面流元件,當然也支援激情四射的你自定義添加元件,這個會涉及到流程元件開發方面的問題,不在這一節當中詳細說明了。
第一步:選擇向導
第二步選擇要生成的文檔
然後,就是看生成的文檔了
技術經理完全可以通過看文檔就知道程式的執行結果及程式員完成的情況。
好像有點走題哦,下次再重點介紹流程編排相關的事情。
tiny架構的控制層,提供了對象自動組裝、資料校驗、代碼方式編寫控制層、流程編排方式編寫控制層等靈活多樣的編寫方式。真正把程式員從繁雜的工作當中解脫出來,隻做自己需要做的事情。
至此,tiny快速入門的主要四節内容已經講了三節,回顧一下就是:
<a href="http://my.oschina.net/tinyframework/blog/347754" target="_blank">tiny快速入門之服務開發</a>
<a href="http://my.oschina.net/tinyframework/blog/348587" target="_blank">tiny快速入門之web界面快速開發實踐</a>
明天将編寫tiny快速入門之流程開發,敬請期待