我在WebSphere 8 portlet中使用Dojo1.9.1AMD,并且无法弄清楚如何继续利用WebSphere机制来获取/设置用户的portlet首选项。在从前AMD Dojo (1.6)迁移到Dojo 1.9.1 AMD之前,我在一些JSP文件的顶部包括了以下几行:
<%@ taglib uri="http://www.ibm.com/xmlns/prod/websphere/portal/v6.1/portlet-client-model“prefix=”portlet-client模型“”%>
它们在运行时被转换/生成到这些行:
<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:--portletwindowid--@oid: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首选项。当我尝试在Dojo1.9.1AMD中使用同样的技术时,上面生成的相同代码会导致javascript错误,抱怨"dojo.require“不是函数。
使用改进的Dojo,我不再像以前那样调用"dojo.require“,因此我没有遇到这个问题,但是这些WebSphere自定义标记会自动生成"dojo.require”调用,而这些调用现在正在失败。
我是否需要尝试将dojo.js的旧的前AMD包含与首选的AMD包含调用混合?有人遇到过这个问题吗?
任何帮助都是非常感谢的。谢谢。
发布于 2015-03-06 08:29:25
您的主要问题是使用了一个旧的taglib。如果查看URL,就会发现您使用的是v6.1标记库,它使用的是Dojo 1.4.3,显然已经过时了。尝试将taglib替换为:
<%@ taglib
uri="http://www.ibm.com/xmlns/prod/websphere/portal/v8.0/portlet-client-model"
prefix="portlet-client-model" %>我认为这应该会生成一些与最新版本兼容的更合适的代码。您可能还需要更新类路径上的一些库。
另外,如果您使用的是WebSphere Portal 8,那么只有Dojo1.7是官方支持的,所以请确保这里没有使用不同的版本。DojoPortal8.5支持Dojo1.9(确切地使用1.9.3 ),但从您的问题来看,不清楚您使用的是v8还是v8.5。
如果您想更改Dojo配置并设置async: false,这是可能的,但是您必须在加载 dojo.js之前将其设置为dojo.js。这意味着您必须编辑theme.html和本地化主题(例如,要在co:head动态内容点之上添加以下内容:
<script type="text/javascript">
dojoConfig = {
async: false
};
</script>
<link rel="dynamic-content" href="co:head">但是要小心,如果您设置它,您可能会破坏某些东西,我不知道IBM是否有自己的配置,其中包括自定义包,但如果它们包含自定义包,并且您正在覆盖该配置,那么它可能会导致错误。
https://stackoverflow.com/questions/28814770
复制相似问题