2015-03-02 81 views
0

我正在使用帶有WebSphere 8 portlet的Dojo 1.9.1 AMD,但無法弄清楚如何繼續利用WebSphere機制獲取/設置用戶的portlet首選項。之前由預AMD道場(1.6)移動到道場1.9.1 AMD,我被包括一些JSP的頂部文件這些行:Dojo AMD和portlet客戶端模型

<%@ taglib uri="http://www.ibm.com/xmlns/prod/websphere/portal/v6.1/portlet-client-model" 
prefix="portlet-client-model" %> <portlet:defineObjects/> 
<portlet-client-model:init> 
    <portlet-client-model:require module="ibm.portal.xml.*"/> 
    <portlet-client-model:require module="ibm.portal.portlet.*"/> 
</portlet-client-model:init> 

其中獲得轉換後的/生成到這些線在運行時:

<script> if(typeof dojo=='undefined') { 
    document.writeln("<scr"+"ipt src='/wps/portal_dojo/v1.4.3/dojo/dojo.js' ></scr"+"ipt>"); 
} </script> 
<script>dojo.require('ibm.portal.xml.xpath'); dojo.require('ibm.portal.xml.xslt');</script> 
<script>dojo.require('ibm.portal.portlet.portlet');</script> 
<script>if(typeof(ibmPortalConfig) == "undefined") {ibmPortalConfig = {contentHandlerURI: "/wps/mycontenthandler/urs/!ut/p/digest!q8eCn6qc7fl2VjdmXXlayA/nm/oid:wps.portal.root"};} else if(!ibmPortalConfig["contentHandlerURI"]) {ibmPortalConfig["contentHandlerURI"] = "/wps/mycontenthandler/urs/!ut/p/digest!q8eCn6qc7fl2VjdmXXlayA/nm/oid:wps.portal.root";} </script><div id='com.ibm.wps.web2.portlet.root.Z7_HHGGGIO0JGPN00AI72U5E530O2' style='display: none;'>/wps/mycontenthandler/urs/!ut/p/digest!q8eCn6qc7fl2VjdmXXlayA/pm/oid:[email protected]:Z6_HHGGGIO0JGPN00AI72U5E530G4</div> 
<div id='com.ibm.wps.web2.portlet.preferences.Z7_HHGGGIO0JGPN00AI72U5E530O2' style='display: none;' pageid='Z6_HHGGGIO0JGPN00AI72U5E530G4' configid='Z3_HHGGGIO0JGPN00AI72U5E53085' editdefaultsid='Z5_HHGGGIO0JGPN00AI72U5E530O6' 
></div> 
<div id='com.ibm.wps.web2.portlet.user.Z7_HHGGGIO0JGPN00AI72U5E530O2' style='display: none;'>/wps/mycontenthandler/urs/!ut/p/digest!q8eCn6qc7fl2VjdmXXlayA/um/secure/currentuser/profile?expandRefs=true</div> 

然後,它允許我使用JavaScript獲取和設置用戶portlet首選項。當我嘗試在Dojo 1.9.1 AMD中使用相同的技術時,上面生成的相同代碼會導致出現javascript錯誤,抱怨「dojo.require」不是函數。通過改進的Dojo AMD,我不再像以前那樣對「dojo.require」進行任何調用,所以我沒有遇到這個問題,但是這些WebSphere定製標記自動生成「dojo.require」調用,它們會自動生成「dojo.require」調用現在失敗了。

我是否需要嘗試將舊的AMD之前的dojo.js包含在首選的AMD包含調用中?有沒有人遇到過這個問題呢?

任何幫助表示讚賞。謝謝。

+0

在dojo AMD中,您只需要使用'require()'函數而不是'dojo.require'。所以你的WebSphere應該生成'require(['ibm.portal.xml.xpath'])''。現在Websphere如何生成我不知道的代碼。 – frank 2015-03-02 17:08:12

+0

感謝您的幫助。我一直在尋找任何可以生成AMD語法但尚未發現任何更新的WebSphere定製標記。 – okorng 2015-03-02 17:11:38

+0

經過更多搜索,我發現了一個類似的問題,在這裏http://stackoverflow.com/questions/19054350/how-to-include-legacy-module-in-dojo-amd提供了一個可能適用於我的答案。我將在加載器中將async:true更改爲async:false,這將允許舊語法和新語法都起作用。將盡快報告。 – okorng 2015-03-03 13:56:59

回答

1

您的主要問題是您正在使用舊的taglib。如果我看看URL,我發現您使用的是使用Dojo 1.4.3的v6.1 taglib,這顯然已經過時。嘗試替換taglib:

<%@ taglib 
    uri="http://www.ibm.com/xmlns/prod/websphere/portal/v8.0/portlet-client-model" 
    prefix="portlet-client-model" %> 

我想應該生成一些更合適的代碼,與最新版本兼容。您可能還需要更新類路徑中的某些庫。另外,如果您使用的是WebSphere Portal 8,那麼只有Dojo 1.7是官方支持的,因此請確保您在此處不使用不同的版本。 WebSphere Portal 8.5支持Dojo 1.9(完全使用1.9.3),但從您的問題來看,不清楚您使用的是v8還是v8.5。


如果你想改變道場的配置和設置async: false,這是可能的,但你必須將其設置以前的dojo.js被加載。這意味着你必須編輯theme.html和本地化主題(例如theme_en.html),添加以下內容上面的co:head動態內容點:

<script type="text/javascript"> 
    dojoConfig = { 
     async: false 
    }; 
</script> 
<link rel="dynamic-content" href="co:head"> 

不過要小心,如果你設置它,你可能會破壞一些東西,我不知道IBM是否有自己的配置,包括自定義軟件包,但是如果他們這樣做,並且你重寫了那個配置,那麼它可能會導致錯誤。

+0

欣賞您的輸入。我會立即嘗試v8 taglib的更改並儘快報告。我正在使用V8,而不是V8.5,並且絕對寧願離開async:true,所以希望能夠避免將其設置爲false。 – okorng 2015-03-08 23:57:52

+0

試過了,不幸的是,v8.0更改爲taglib沒有什麼區別。將繼續尋找解決方案。 – okorng 2015-03-09 01:33:21

+0

它仍然使用Dojo 1.4.3生成代碼?我認爲值得爲此打開PMR。我的意思是,如果您使用的是8.0庫,那麼我認爲它應該與WebSphere Portal 8.0兼容,如果情況並非如此,那麼IBM應該看看它。但是,你確定你更新了taglib JAR和de JSP中的版本嗎? – g00glen00b 2015-03-09 08:01:10