exo文件_您在eXo平台上的第一个Juzu Portlet
exo文件
菊珠是佛教的佛珠。 一句話,我相信您已經學到了什么,印象深刻嗎? 好吧,我在這里不談論佛教。
Juzu還是一個用于快速開發Portlet(以及即將推出的獨立應用程序)的新框架。 您可以在Juzu網站上找到所需的所有信息。
現在,讓我們用Juzu創建我們的第一個portlet!
創建一個新項目
Juzu具有Maven原型。 我們可以使用它來快速創建第一個應用程序:
mvn archetype:generate \-DarchetypeGroupId=org.juzu \-DarchetypeArtifactId=juzu-archetype \-DarchetypeVersion=0.5.1 \-DgroupId=org.example \-DartifactId=myapp \-Dversion=1.0.0-SNAPSHOT 這將在myapp文件夾中創建juzu項目。
部署Juzu Portlet
在部署應用程序之前,您需要先構建它。
只需在myapp文件夾中運行mvn clean package 。 它將在myapp / target文件夾下生成一個myapp.war 。
現在,我們準備在門戶容器中部署portlet。 我們將使用最新的GateIn版本(3.4),即tomcat捆綁軟件版本 。 下載后,將其解壓縮到您選擇的位置進行安裝。
您唯一需要做的就是將myapp.war文件拖放到webapps文件夾中,并使用bin / gatein.sh run啟動GateIn。
啟動后,將您的portlet添加到頁面中。 您應該看到:
太好了! 您剛完成第一個Juzu portlet!
讓我們在增強項目之前先對其進行探索。
探索項目
項目結構如下所示:
強制性的web.xml在那里。 它不包含任何東西。
portlet.xml
該原型生成帶有一些juzu init參數的基本portlet.xml:
<?xml version='1.0' encoding='UTF-8'?> <portlet-app xmlns='http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd'version='2.0'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xsi:schemaLocation='http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsdhttp://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd'><portlet><portlet-name>SampleApplication</portlet-name><display-name xml:lang='EN'>Juzu Sample Application</display-name><portlet-class>juzu.portlet.JuzuPortlet</portlet-class><init-param><name>juzu.run_mode</name><value>prod</value></init-param><init-param><name>juzu.inject</name><value>weld</value><!--<value>spring</value>--></init-param><supports><mime-type>text/html</mime-type></supports><portlet-info><title>Sample Application</title></portlet-info></portlet> </portlet-app> portlet類是通用的Juzu portlet類juzu.portlet.JuzuPortlet 。
此類聲明2個init參數:
- juzu.run_mode
- dev :對源文件所做的更改將自動進行熱編譯和重新加載,因此您無需重新部署應用程序即可對其進行測試。
- juzu.inject –定義注入實現。 當前支持兩種實現: 焊接 (CDI參考實現)和彈簧 。
Juzu portlet類使用package-info.java文件收集所需的額外信息。
portlet.xml文件還包含有關portlet的基本信息: portlet-name , display-name和portlet-info 。 您可以更改它們,或根據需要添加其他一些。
包信息.java
該文件包含應用程序的所有配置。
該文件允許激活插件,添加JS / CSS資源,…,但是現在讓我們保持簡單。
由于@ juzu.Application批注,唯一的強制性配置是應用程序的聲明。 您必須聲明應用程序的基本包,在本例中為org.sample 。
Controller.java
此類是Juzu控制器。 它由一個視圖方法索引 (用@View注釋)組成,該方法允許呈現索引模板。
索引模板的路徑使用@Path注釋設置。 默認情況下,Juzu使用應用程序的模板包作為其根路徑。 因此,在本例中,模板位于org / sample / templates / index.gtmpl 。
切換至開發模式
現在,我們對什么是Juzu應用程序有了更多的了解,讓我們對基本的helloworld應用程序進行一些改進。
首先,我們將從生產模式切換到開發模式,以便快速測試我們的更改。 為此,請編輯portlet.xml文件,并將init-param juzu.run_mode的值更改為dev 。 然后構建您的應用程序,并將戰爭放在GateIn的webapps文件夾中。 在這里,您無需停止/啟動GateIn,因為Webapp將自動重新部署。
由于我們沒有在應用程序的源文件中進行任何更改,因此您應該在portlet中看到相同的“ Hello World”消息。
為了測試開發模式,您可以例如將文件webapps / myapp / WEB-INF / src / org / sample / templates / index.gtmpl重命名為index2.gtmpl 。 刷新頁面后,您將收到以下消息:
現在編輯webapps / myapp / WEB-INF / src / org / sample / Controller.java并進行更改
@Inject @Path('index.gtmpl') Template index;通過
@Inject @Path('index2.gtmpl') Template index; 并再次刷新您的頁面。
一切恢復正常! 很酷,不是嗎?
表單,動作和類型安全模板參數
我們將創建一個顯示用戶選擇的位置地圖的應用程序。
首先,更新您的index.gtmpl模板:
- #{param name = location /}和#{param name = mapURL /}聲明2種類型的安全模板參數,這些參數稍后將在我們的Controller中使用
- 該表單包含輸入文本,并提交給我們的juzu控制器操作updateLocation
- 最后,如果指定了位置,則顯示地圖
現在,讓我們更新更新Controller.java:
package org.sample;import juzu.Action; import juzu.Path; import juzu.Resource; import juzu.Response; import juzu.View; import juzu.template.Template;import javax.inject.Inject; import java.io.IOException; import java.util.HashMap; import java.util.Map;public class Controller {@Inject@Path('index.gtmpl')org.sample.templates.index index;@Viewpublic void index() throws IOException {index('', '');}@Viewpublic void index(String location, String mapURL) throws IOException {index.with().location(location).mapURL(mapURL).render();}@Actionpublic Response updateLocation(String location) throws IOException {String mapURL = 'https://maps.google.fr/maps?f=q&source=s_q&hl=en&geocode=&q=' + location + '&aq=&t=m&ie=UTF8&hq=&hnear=' + location + '&z=12&output=embed';return Controller_.index(location, mapURL);} }- 索引模板現在的類型為org.sample.templates.index 。 此類是通過注釋生成的,并且是Template的子類。 使用這種特定類型將使我們能夠利用已聲明的模板參數, 位置和mapURL 。
- 默認索引視圖現在調用一個新的索引視圖,該視圖接受location和mapURL參數。 這個新視圖使用索引模板類及其流利的語法(您喜歡它嗎?我是個人角色)。 由于在模板中聲明了location和mapURL參數,因此org.sample.templates.index模板類接受了location方法和mapURL方法來設置其值。
- 通過@Action批注,將updateLocation方法定義為動作。 表單會調用它來檢索正確的URL(構建地圖URL是一個基本示例,通常會在這里調用您的服務)。 然后,它重定向到index View方法以呈現索引模板。 請注意控制器名稱末尾的_。 Controller_類是Controller類的“已處理注釋”版本。
如果在應用程序的已部署版本中進行了所有這些更改(在webapps / myapp中),則只需刷新即可,您應該能夠輸入位置,然后查看相應的地圖:
阿賈克斯
Juzu使您可以輕松地在應用程序中使用Ajax。 在表單中提交新位置時,我們將使用它們來避免重新加載頁面。
Ajax插件需要JQuery。 我們可以通過簡單地將JQuery js文件拖放到項目中并使用Asset插件在package-info.java文件中聲明它來將其添加到我們的應用程序中(我將JQuery js文件拖放到public / scripts中):
現在,我們將更新控制器,以添加僅提供地圖URL的新方法:
@Ajax@Resourcepublic Response.Content<Stream.Char> getMapURL(String location) throws IOException {String mapURL = 'https://maps.google.fr/maps?f=q&source=s_q&hl=en&geocode=&q=' + location + '&aq=&t=m&ie=UTF8&hq=&hnear=' + location + '&z=12&output=embed';return Response.ok('{\'mapURL\': \'' + mapURL +'\'}').withMimeType('application/json');}請注意,此新方法不再使用@Action進行注釋。 使用@Ajax注釋方法將使其可用于Ajax調用。 @Resource批注使此方法將整個響應發送到客戶端。 這就是我們想要的,因為此方法只是創建新的URL并將其作為JSON響應發送回客戶端。
最后,我們必須更新模板文件以添加Ajax調用:
#{param name=location/} #{param name=mapURL/}<script> function submitLocation(location) {$('#map').jzAjax({url: 'Controller.getMapURL()',data: {'location': location}}).done(function(data) {$('#map > iframe').attr('src', data.mapURL);});return false; } </script>Location : <form onsubmit='return submitLocation(this.location.value)'><input type='text' name='location' value='${location}'/><input type='submit'/> </form> <br/><div id='map'></div>表單的提交現在調用了SubmitLocation javascript函數。 該函數使用juzu Ajax函數jzAjax (在后臺使用ajax JQuery函數)。 此函數使用data中提供的參數調用url參數中提供的URL 。 因此,在這里它將調用Controller的新創建的方法,并以JSON接收新的地圖URL:
{'mapURL': 'https://maps.google.fr/maps?f=q&source=s_q&hl=en&geocode=&q=nantes&aq=&t=m&ie=UTF8&hq=&hnear=nantes&z=12&output=embed'}然后,我們僅使用JQuery來更新地圖。
再一次,只需刷新頁面即可查看它的實際效果!
現在,您可以通過訪問網站或觀看截屏視頻來了解有關Juzu的更多信息。
祝您編程愉快,別忘了分享!
參考: 您的第一個Juzu Portlet,來自TCG 博客博客中的JCG合作伙伴 Thomas Delhimenie。
翻譯自: https://www.javacodegeeks.com/2012/10/your-first-juzu-portlet-on-exo-platform.html
exo文件
總結
以上是生活随笔為你收集整理的exo文件_您在eXo平台上的第一个Juzu Portlet的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 发布就交付!华为AITO问界新M7系列售
- 下一篇: 品牌力逆势增长 荣耀获BrandZ 20