日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

您在eXo平台上的第一个Juzu Portlet

發布時間:2023/12/3 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 您在eXo平台上的第一个Juzu Portlet 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
菊珠是佛教的佛珠。 一句話,我相信您已經學到了什么,印象深刻嗎?

好的,我在這里不談論佛教。
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-namedisplay-nameportlet-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/}Location : <form action='@{updateLocation()}' method='post'><input type='text' name='location' value='${location}'/><input type='submit'/> </form> <br/> <%if(location) {%> <div id='map'></div> <%}%>
  • #{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
  • 默認索引視圖現在調用一個新的索引視圖,該視圖接受locationmapURL參數。 這個新視圖使用了索引模板類及其流利的語法(您喜歡它嗎?我是個人角色)。 由于在模板中聲明了locationmapURL參數,因此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中):

@juzu.plugin.asset.Assets(scripts = {@juzu.plugin.asset.Script(id = 'jquery', src = 'public/scripts/jquery-1.7.1.min.js')} )

現在,我們將更新控制器,以添加僅提供地圖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平台上的第一个Juzu Portlet的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。