为何classic主题的sjTree组件无法正常工作?如何修复相关报错?
问题描述
使用sjTree标签设置jstreetheme="classic"时组件无法正常工作,标签代码如下:
<sjt:tree name="searchtree" id="jsonTree" href="%{treeDataUrl}" formIds="formsearch" jstreetheme="classic" onCompleteTopics="setImagesSize" onClickTopics="selectTreeItem" showThemeDots="true" showThemeIcons="true" />
控制台出现两个错误:
错误1:
jquery-2.2.4.min.js:3 GET http://localhost:8080/seswinlite/struts/js/jstree/themes/classic/style.css net::ERR_ABORTED 404 (Not Found)
错误2:
base.js:813 Uncaught TypeError: Cannot read properties of undefined (reading 'style')
at HTMLDocument. (base.js:813:58)
at HTMLDocument.dispatch (jquery-2.2.4.min.js:3:7537)
at r.handle (jquery-2.2.4.min.js:3:5620)
at Object.trigger (jquery-2.2.4.min.js:4:4818)
at HTMLDocument. (jquery-2.2.4.min.js:4:5328)
at Function.each (jquery-2.2.4.min.js:2:2861)
at n.fn.init.each (jquery-2.2.4.min.js:2:845)
at n.fn.init.trigger (jquery-2.2.4.min.js:4:5304)
at n.fn.init. (jquery.subscribe.min.js?s2j=4.0.3:4:376)
at Function.each (jquery-2.2.4.min.js:2:2861)
修复步骤
解决404资源缺失问题
- 检查项目中
struts/js/jstree/themes/classic/路径下是否存在style.css及配套主题资源(如图标、点标记图片)。 - 若文件缺失,从对应版本的struts2-jquery-plugin包中提取classic主题的完整文件(包含style.css和themes/classic下的所有资源),放置到项目的对应路径中。确保插件版本与项目中使用的一致,避免兼容性问题。
- 验证路径可访问性:直接在浏览器输入
http://localhost:8080/seswinlite/struts/js/jstree/themes/classic/style.css,确认能正常加载。若无法访问,调整资源放置路径或服务器的静态资源映射规则。
- 检查项目中
修复TypeError错误
这个错误是由于主题样式未加载导致jstree DOM元素未正确渲染,后续JS代码无法读取元素的style属性。解决完上述404问题后,该错误通常会自动消失。若仍存在:- 检查
setImagesSize和selectTreeItem这两个topic对应的处理函数,确保它们在jstree组件完全初始化后再执行操作。 - 可在处理函数中添加DOM存在性判断,比如先通过
$("#jsonTree").length确认树元素已加载,再执行相关样式操作。
- 检查
内容的提问来源于stack exchange,提问作者Imad

