2015-03-02 39 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