Eclipse 自动完成快捷方式不显示使用复合组件的新标签的属性
Posted
技术标签:
【中文标题】Eclipse 自动完成快捷方式不显示使用复合组件的新标签的属性【英文标题】:Properties of new tags using composite component are not displayed by Eclipse auto complete shortcurt 【发布时间】:2015-02-14 19:14:14 【问题描述】:我在 Eclipse 中使用 JSF 2.0 开发了复合组件。我一直将我的 Xhtml 标记文件放在 resources
文件夹中。
当我在键盘上点击 ctrl + space 时,标签的属性不显示。
我发现了一些提示安装“Jboss 工具”但没有用的提示。
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:cc="http://xmlns.jcp.org/jsf/composite"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:p="http://primefaces.org/ui">
<cc:interface>
<cc:attribute name="value"/>
<cc:attribute name="label"/>
<cc:attribute name="masculino" default="true"/>
</cc:interface>
<cc:implementation>
<p:selectOneMenu value="#cc.attrs.value" label="#cc.attrs.label">
<f:selectItem itemValue="#null"
itemLabel="#cc.attrs.masculino ? lbl['LABEL.TODOS'] : lbl['LABEL.TODAS']" />
<f:selectItem itemValue="true" itemLabel="#lbl['LABEL.SIM']" />
<f:selectItem itemValue="false" itemLabel="#lbl['LABEL.NAO']" />
</p:selectOneMenu>
</cc:implementation>
</html>
以上是创建一个标签的一个示例。
谢谢
【问题讨论】:
您解决了这个问题吗? 不,我还在等待解决方案 @user3503888 尝试更新你的eclipse版本 @RohitGaikwad 到什么版本? 【参考方案1】:JSF 2.x Facelets 支持集成在“Eclipse IDE for Enterprise Java Developers”中(注意 Enterprise,因此不是“面向 Java 开发人员的 Eclipse IDE”),因为 Eclipse Helios(3.6 版,2010 年 6 月发布) )。您需要确保在项目属性的 Project Facets 部分中启用了 JavaServer Faces facet,并设置为最低版本 2.0。
这通常可以在新的Dynamic Web Project 向导中配置,但在导入非 Eclipse 项目或创建非Dynamic Web Project 项目(例如 Maven 原型)时,那么你需要手动检查/添加它。
一旦集成,JSF 标记自动完成默认在java.sun.com
XML 命名空间中可用。
默认无法识别新的xmlns.jcp.org
命名空间(当前测试的 Eclipse 版本是 Luna SR2)。
新的xmlns.jcp.org
命名空间只有在你添加了一个物理的 JSF 2.2 实现来构建路径时才能工作,该路径具有完整的 Java EE 容器的风格,其模块中包含 JSF 2.2,通过一个体面的服务器插件集成并设置为Targeted Runtimes 在项目的属性中,或者在 Tomcat 和克隆的情况下(或通过将其添加为 Maven 依赖项)/WEB-INF/lib
中的具体 JSF 2.2 实现 JAR 文件。
它只是仍然无法识别新 XML 命名空间中的组合。改回java.sun.com
时,复合组件标签的代码补全又回来了,但这些标签上的属性的代码补全不可用。
然后我安装了JBoss Tools 4.2.3 for Eclipse Luna 并在项目的属性中启用了JBoss 工具知识库。
关闭并重新打开 Facelet 后(这样 JBoss 内置 HTML 编辑器就会打开;您可以设置/配置右键单击使用的编辑器,打开方式),然后切换到 Source em> 选项卡(请不要使用Visual 编辑器,这是一场灾难),我终于得到了复合组件属性的代码完成。
只有xmlns.jcp.org
仍然不起作用。这是一个 Eclipse 特定问题,可能已经在 Mars 或更新版本中修复。您始终可以将复合命名空间隐藏在自定义 XML 命名空间后面,如下所示:
/WEB-INF/my.taglib.xml
<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facelettaglibrary_2_2.xsd"
version="2.2"
>
<namespace>http://example.com/my</namespace>
<composite-library-name>components</composite-library-name>
</facelet-taglib>
/WEB-INF/web.xml
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/my.taglib.xml</param-value>
</context-param>
所以,总结一下:
在项目属性中启用 JSF 项目方面,以便在复合标记上完成代码。 安装 JBoss Tools 以完成复合标签中属性的代码。 在项目属性中启用 JBoss 工具知识库。 在构建路径中有一个物理 JSF 2.2 impl JAR,用于标准标签上的xmlns.jcp.org
支持。
在复合标签上使用java.sun.com
XML 命名空间域或自定义 taglib(或更新的 Eclipse 版本)。
【讨论】:
如你所说,在 Luna 版本中,新的命名空间仍然无法正常工作。【参考方案2】:我正在使用带有 Java EE 包、Hibernate 工具和 Spring IDE 的 Eclipse Mars,我刚刚检查过它开箱即用。
确保您的组件位于webapp/resources/YOUR_COMP_NAME
下。
忽略这一点,请参阅下面的版本: 在您的示例代码中查看 composite
的标头命名空间
xmlns:cc="http://xmlns.jcp.org/jsf/composite"
但在我的代码中我有
xmlns:composite="http://java.sun.com/jsf/composite"
不介意是否使用cc
pr composite
前缀,但如您所见,URL 是不同的。见this document
最后,当你在任何 xhtml 页面中使用这个组合时,包括它如下:
xmlns:prefix="http://java.sun.com/jsf/composite/YOUR_COMP_NAME"
这样,当你在 eclipse <prefix:
中编写并按下 ctrl + space 时,它会显示你拥有的组件列表。
编辑
我刚刚意识到http://xmlns.jcp.org/jsf/composite
是替代http://java.sun.com/jsf/composite
的新URL,所以我在我的代码中更改了它,它已经可以工作了。
【讨论】:
以上是关于Eclipse 自动完成快捷方式不显示使用复合组件的新标签的属性的主要内容,如果未能解决你的问题,请参考以下文章