资源发布器

处理模板时发生错误。
No error description was specified for this error; low-level message: java.lang.ClassNotFoundException: com.liferay.portlet.asset.model.AssetRenderer cannot be found by com.liferay.portal.template.freemarker_2.0.27

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign PortalAssetRenderer = staticU...  [in template "11002#11040#69601" at line 2, column 1]
----
1<div id="podcast"></div> 
2<#assign PortalAssetRenderer = staticUtil["com.liferay.portlet.asset.model.AssetRenderer"] /> 
3<#assign DLAppLocalServiceUtil = staticUtil["com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil"] /> 
4<#assign FileVersion = staticUtil["com.liferay.portal.kernel.repository.model.FileVersion"] /> 
5<#assign StringPool = staticUtil["com.liferay.portal.kernel.util.StringPool"] /> 
6<#assign HttpUtil = staticUtil["com.liferay.portal.kernel.util.HttpUtil"] /> 
7<#assign HtmlUtil = staticUtil["com.liferay.portal.kernel.util.HtmlUtil"] /> 
8 
9<select id="podcastDropdown"> 
10    <#list entries as entry> 
11         
12        
13            <#assign assetRenderer = entry.getAssetRenderer() /> 
14            <#assign entryTitle = htmlUtil.escape(assetRenderer.getTitle(locale)) /> 
15            <#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, entry) /> 
16             
17            <#if assetRenderer.getType()=="document"> 
18             
19                <#assign dlFileEntryId = assetRenderer.getClassPK() /> 
20                <#assign fileEntry = DLAppLocalServiceUtil.getFileEntry(dlFileEntryId)  /> 
21                <#assign fileVersion = fileEntry.getLatestFileVersion() /> 
22                <#assign viewURL = themeDisplay.getPortalURL() + themeDisplay.getPathContext() + "/documents/" + fileEntry.getGroupId() + StringPool.SLASH + fileEntry.getFolderId() + StringPool.SLASH + HttpUtil.encodeURL(HtmlUtil.unescape(fileEntry.getTitle())) + StringPool.SLASH + fileEntry.getUuid() + "?version=" + fileVersion.getVersion() /> 
23 
24            </#if> 
25             
26        <option value="${viewURL}"> 
27        	Part ${entries?size - entry_index} - sections ${entryTitle} 
28        </option> 
29    </#list> 
30</select> 
31<div> 
32<a href="" id="podcast-download">Download <span id="podcast-download-part"></span></a> 
33</div> 
34<script type="text/javascript"> 
35    try { 
36         
37        YUI().use( 
38            'aui-audio', 
39            function(Y) { 
40             var targetUrl = Y.one("#podcastDropdown").get("options").item(0).get("value");    
41             var podcastAudio = new Y.Audio( 
42
43                    boundingBox: '#podcast', 
44                    url: targetUrl, 
45                    oggUrl: targetUrl, 
46                 
47
48             ).render(); 
49             Y.one("#podcast-download").set("href", targetUrl); 
50             
51              Y.one("#podcastDropdown").on("change", function(e){ 
52                try { 
53                    e.preventDefault();  
54                    Y.one("#podcast").empty(); 
55                    podcastAudio = new Y.Audio({ 
56                        boundingBox: '#podcast', 
57                        url: this.get("value"), 
58                        oggUrl: this.get("value") 
59 
60                    }); 
61                    Y.one("#podcast-download").set("href", this.get("value")); 
62                     
63                } catch (err) { 
64                    if (console) { 
65                        console.log(err); 
66
67
68             }); 
69
70        ); 
71 
72    } catch (err) { 
73        if (console) { 
74            console.log(err); 
75
76
77</script> 
78<style type="text/css"> 
79#podcastDropdown, #podcast { 
80    width: 100%; 
81    margin-bottom: 15px; 
82
83#podcast-download { 
84    margin-bottom: 15px; 
85
86</style>