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 &lt;prefix: 中编写并按下 ctrl + space 时,它会显示你拥有的组件列表。

编辑

我刚刚意识到http://xmlns.jcp.org/jsf/composite 是替代http://java.sun.com/jsf/composite 的新URL,所以我在我的代码中更改了它,它已经可以工作了。

【讨论】:

以上是关于Eclipse 自动完成快捷方式不显示使用复合组件的新标签的属性的主要内容,如果未能解决你的问题,请参考以下文章

像在 Eclipse 中那样自动导入 IntelliJ IDEA 中的类的任何方式(或快捷方式)?

Eclipse'syso'快捷方式不起作用?

eclipse自动补全快捷键

Eclipse中的C代码自动完成

快捷方式图标显示不正常,但是程序能正常使用,帮帮忙吧

Xamarin 自动导入快捷方式