in <@include file="...">-6ren"> in <@include file="...">-让有一个(Liferay hook 插件)eclipse 项目 xyz-hook。并让文件a.jsp 并让另一个(引用的)项目中包含包含的 init.jsp。 对于项目 xyz-hook 中的 -6ren">
gpt4 book ai didi

java - 如何在 Eclipse 中配置项目以便正确验证 jsps,包括 <%@page import ="...%>in <@include file="...">

转载 作者:行者123 更新时间:2023-12-01 13:27:36 26 4
gpt4 key购买 nike

让有一个(Liferay hook 插件)eclipse 项目 xyz-hook。并让文件a.jsp

<% @include file="/html/portal/init.jsp" %>
<% InitImportedClass.yxz(); %>

并让另一个(引用的)项目中包含包含的 init.jsp。

<% @page import="de.company.InitImportedClass" %>

对于项目 xyz-hook 中的 a.jsp,我们在第 1 行收到警告

在预期路径/xyz-hook/src/main/webapp/html/portal/init.jsp 处找不到片段“/html/portal/init.jsp”

第 2 行出现错误

InitImportedClass 无法解析

有什么方法可以告诉Eclipse去其他项目中寻找init.jsp吗?

包含 init.jsp 的项目(Liferay 门户主干)已被引用。我还创建了一个包含 jsp 的合成 jar,将其添加到本地 Maven 存储库并作为项目 xyz-hook 的依赖项。

PS:对于那些想知道的人来说,这是 Liferay 钩子(Hook)在替换 jsps 时的典型设置,由门户核心提供。

PPS:我知道我可以完全停用 jsp 验证,但这是我想避免的事情,因为否则真正丢失的导入也不会显示为错误。

最佳答案

我非常欢迎这样的功能,但根据我上次关于它的对话,它真的很难解决,并且需要对相当多的组件进行重大更改。鉴于 jsp 编辑器已经有些脆弱(有时它显示不存在的验证错误),我认为在不久的将来不会有人攻击它。但我会以此为理由再次唠叨。 (您可能想在 https://issues.liferay.com/browse/IDE 上发布功能请求或查找现有的功能请求并支持它)

但是,有一些解决方法:

<liferay-util:include /> jsp-tag 您可以指定 servletContext 并包含来自您自己的钩子(Hook)的另一个 JSP。这将在指定的 web 应用程序的类加载器中运行,并且 eclipse 可以很好地处理该类加载器。在 jsp-hook 中,您仍然需要停用 jsp 验证,但剩余的 JSP 只是执行包含业务的几个字符,这完全没问题。

您需要做更多的工作来获取所有上下文等,但如果您正在做一些更繁重的工作,这可能是一个选择。您还可以使用钩子(Hook)中的自定义类 - 当您将新的 jsp 引入门户类加载器时,通常不能这样做。

伪代码示例:

在你的钩子(Hook)中,从门户覆盖jsps,例如在my-hook/custom-jsps/html/portlet/navigation/view.jsp

   <%-- omitted taglib includes --%>
<liferay-util:include
page="/jsp/navigation/view.jsp"
servletContext="<%=this.getServletContext().getContext("/my-hook")%>" />

这将使用您自己的实现来覆盖 Liferay 导航 portlet 的默认 jsp。然而,它显然没有做太多事情,但包括 /jsp/navigation/view.jsp它将在您自己的 Hook 中找到(注意: /custom-jsps 包含覆盖门户的 jsps - /jsp 中的文件将在 Hook 的上下文中提供:

my-hook/jsp/navigation/view.jsp

   <%-- omitted taglib includes --%> 
<ul>
<li>build</li><li>your</li><li>navigation</li>
</ul>
<!-- you also have access to classes introduced by your hook -->
<%=CustomClassInHook.doSomething() %>

缺点是您必须“重复”每个 Liferay jsp 通常自己进行的初始化 - 例如导入语句,使 themeDisplay 可用等。

另外,请注意:以上是伪代码。我只是从一些(笔和纸)笔记中输入它,而不是运行它。因此,它可能需要更多的工作,并且还有其他缺点或不足。

<小时/>

另一种可能性是在 Liferay 的源代码中开发复杂的重写 jsps,并在完成后将它们带入您自己的钩子(Hook)中。如果您需要重建 Liferay(但谁会为 jsp 更改而重建?),那么您将在构建时受到影响,但您可以获得所有 IDE 的奢华

关于java - 如何在 Eclipse 中配置项目以便正确验证 jsps,包括 <%@page import ="...%>in <@include file="...">,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21735430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com