繁体   English   中英

JSF2.2 @Named不起作用

[英]JSF2.2 @Named does not work

我有一个简单的maven jsf2.2项目,可以使用maven jetty插件执行。

我有以下豆:

package de.swp14i;

import javax.inject.Named;
//import javax.faces.bean.ManagedBean;

@Named
//@ManagedBean
public class BeanOne {

    private String varFromBeanOne = "BeanOne";

    public String getVarFromBeanOne() {
        return this.varFromBeanOne;
    }

    public void init() {
        System.out.println();
    }

}

这是视图:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://xmlns.jcp.org/jsf/html" >

<h:head>
    <title>JSF 2.2 HTML5</title>
</h:head>
<h:body>

    <h1>Blub</h1>

    <h:outputText id="beanOne" value="#{beanOne.varFromBeanOne}"></h:outputText>

</h:body>
</html>

如果我启动码头并打开index.xhtml,则会渲染它,但不会显示varFromBeanOne值,并且在启动码头的控制台中,bean的init函数不会输出任何内容。 所以我想根本就不叫它。

如果我将@Named更改为@ManagedBean,则一切正常。

这是我的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
     http://maven.apache.org/maven-v4_0_0.xsd">
<!-- pom.xml specification version -->
<modelVersion>4.0.0</modelVersion>

<!-- project settings -->
<groupId>de.swp14i</groupId>
<artifactId>example</artifactId>
<version>0.1</version>
<name>example</name>
<packaging>war</packaging>

<properties>
    <encoding>UTF-8</encoding>
    <maven-compiler-plugin.version>3.1</maven-compiler-plugin.version>
    <maven-war-plugin.version>2.4</maven-war-plugin.version>        
    <jetty-maven-plugin.version>9.2.0.M1</jetty-maven-plugin.version>
</properties>

<!-- project module dependencies -->
<dependencies>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>2.2.6</version>
    </dependency>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>2.2.6</version>
    </dependency>
    <dependency>
        <groupId>javax.enterprise</groupId>
        <artifactId>cdi-api</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>

</dependencies>

<!-- project maven plugins -->
<build>
    <plugins>
        <plugin>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>${jetty-maven-plugin.version}</version>
            <configuration>
                <scanIntervalSeconds>1</scanIntervalSeconds>
                <webApp>
                    <contextPath>/</contextPath>
                </webApp>
            </configuration>
        </plugin>
    </plugins>
</build>

我不知道为什么会这样。 但是我需要CSF1.2的JSF2.2。 提示为什么它不起作用或指向工作的Maven的链接-没有@ManagedBean的jsf2.2示例将是很棒的。

您可以尝试清理项目并重新运行它。 有时,IDE无法正确更新代码更改。 添加一个类似@ViewScoped的cdi范围(导入javax.faces.view.ViewScoped;),然后重试。

更新:我看到您正在使用码头作为网络容器。 我搜索jetty cdi,发现默认情况下jetty不支持CDI。 Weld可用于添加对CDI的支持:

http://www.eclipse.org/jetty/documentation/current/framework-weld.html

使用CDI向Jetty部署战争

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM