当前位置: 首页 > 知识库问答 >
问题:

所有@ViewScope注释(JSF、CDI、OmniFaces)的行为都类似于@RequestScope

姚建树
2023-03-14

我使用的是:Wildfly 8.2、JSF 2.2(Mojarra 2.2.8)、Omnifaces 2.1和Java7。

问题是我已经创建了一些对象,并且每个请求都会被重新创建(null)。我也尝试过使用conversationScope,但同样的情况也发生了。

使用会话范围它的工作原理。

控制器:

@Named
@ViewScoped
public class Teste implements Serializable {

    private static final long   serialVersionUID = 1L;
    private Map<String, String> passwordReminderUsers;
    private String              key;

    @PostConstruct
    public void init() {
        if (!FacesContext.getCurrentInstance().isPostback())
            passwordReminderUsers = new HashMap<String, String>();
    }

    public void add() {
        passwordReminderUsers.put(key, "b");
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }
}

每次回发时,密码提醒用户都是null,导致NPE。

视图:

    <h:form id="form-login" prependId="false">

        <h:inputText value="#{teste.key}" />
        <h:commandButton value="add" action="#{teste.add()}" />
    </h:form>

我已经做了一些测试,在没有primefaces的情况下执行请求,使用f:ajax和其他一些工具,没有任何效果。

此代码:JSF视图作用域bean:#{验证器}显示重新创建bean的每个请求。

也许相关:我们正在使用JSF 2.0,几个月前更新为JSF 2.2。我必须使用这些名称空间:

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:c="http://java.sun.com/jsp/jstl/core" 
    xmlns:pe="http://primefaces.org/ui/extensions" 
    template="/WEB-INF/templates/default.xhtml">

因为新的xmlns。jcp。orgone不起作用,开始破坏页面,不呈现jsf组件。

MAVEN pom:

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- maven-compiler-plugin -->
        <maven.compiler.target>1.7</maven.compiler.target>
        <maven.compiler.source>1.7</maven.compiler.source>
    </properties>

    <repositories>
        <repository>
            <id>jvnet-nexus-releases</id>
            <name>jvnet-nexus-releases</name>
            <url>http://maven.java.net/content/repositories/releases/</url>
        </repository>
        <repository>
            <id>jboss-public-repository-group</id>
            <name>JBoss Public Repository Group</name>
            <url>http://repository.jboss.org/nexus/content/groups/public/</url>
            <layout>default</layout>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>never</updatePolicy>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>never</updatePolicy>
            </snapshots>
        </repository>
        <repository>
            <id>prime-repo</id>
            <name>Prime Repo</name>
            <url>http://repository.primefaces.org</url>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>jboss-public-repository-group</id>
            <name>JBoss Public Repository Group</name>
            <url>http://repository.jboss.org/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.wildfly.bom</groupId>
                <artifactId>jboss-javaee-7.0-with-hibernate</artifactId>
                <version>8.2.0.Final</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.primefaces</groupId>
            <artifactId>primefaces</artifactId>
            <version>5.2</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.omnifaces</groupId>
            <artifactId>omnifaces</artifactId>
            <version>2.1</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.3</version>
        </dependency>

Wildfly登录启动

java.class.path = C:\wildfly-8.2.0.Final\jboss-modules.jar
    java.class.version = 51.0
    java.endorsed.dirs = C:\Program Files\Java\jre7\lib\endorsed
    java.ext.dirs = C:\Program Files\Java\jre7\lib\ext;C:\windows\Sun\Java\lib\ext
    java.home = C:\Program Files\Java\jre7
    java.io.tmpdir = C:\Users\VICTOR~1.BEL\AppData\Local\Temp\
    java.library.path = C:\Program Files\Java\jre7\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;native;C:\Program Files (x86)\Java\jre7\bin;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\maven\apache-maven-3.2.1\bin;C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\Microsoft SQL Server\110\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\;C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\;c:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files\Microsoft SQL Server\120\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\ManagementStudio\;C:\Program Files (x86)\Microsoft SQL Server\120\DTS\Binn\;C:\Program Files (x86)\Java\jre7\bin;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\maven\apache-maven-3.2.1\bin;C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\Microsoft SQL Server\110\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\;C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\;c:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files (x86)\Microsoft SQL Se;c:\cvs.exe;C:\Program Files (x86)\IDM Computer Solutions\UltraEdit\;.;;.;;.;;.
    java.net.preferIPv4Stack = true
    java.runtime.name = Java(TM) SE Runtime Environment
    java.runtime.version = 1.7.0_51-b13
    java.specification.name = Java Platform API Specification
    java.specification.vendor = Oracle Corporation
    java.specification.version = 1.7
    java.util.logging.manager = org.jboss.logmanager.LogManager
    java.vendor = Oracle Corporation
    java.vendor.url = http://java.oracle.com/
    java.vendor.url.bug = http://bugreport.sun.com/bugreport/
    java.version = 1.7.0_51
    java.vm.info = mixed mode
    java.vm.name = Java HotSpot(TM) 64-Bit Server VM
    java.vm.specification.name = Java Virtual Machine Specification
    java.vm.specification.vendor = Oracle Corporation
    java.vm.specification.version = 1.7
    java.vm.vendor = Oracle Corporation
    java.vm.version = 24.51-b03
    javax.management.builder.initial = org.jboss.as.jmx.PluggableMBeanServerBuilder
    javax.xml.datatype.DatatypeFactory = __redirected.__DatatypeFactory
    javax.xml.parsers.DocumentBuilderFactory = __redirected.__DocumentBuilderFactory
    javax.xml.parsers.SAXParserFactory = __redirected.__SAXParserFactory
    javax.xml.stream.XMLEventFactory = __redirected.__XMLEventFactory
    javax.xml.stream.XMLInputFactory = __redirected.__XMLInputFactory
    javax.xml.stream.XMLOutputFactory = __redirected.__XMLOutputFactory
    javax.xml.transform.TransformerFactory = __redirected.__TransformerFactory
    javax.xml.validation.SchemaFactory:http://www.w3.org/2001/XMLSchema = __redirected.__SchemaFactory
    javax.xml.xpath.XPathFactory:http://java.sun.com/jaxp/xpath/dom = __redirected.__XPathFactory
    jboss.bind.address = localhost
    jboss.bind.address.management = localhost
    jboss.home.dir = C:\wildfly-8.2.0.Final
    jboss.host.name = wvox-000805
    jboss.modules.dir = C:\wildfly-8.2.0.Final\modules
    jboss.modules.system.pkgs = org.jboss.byteman
    jboss.node.name = wvox-000805
    jboss.qualified.host.name = wvox-000805
    jboss.server.base.dir = C:\wildfly-8.2.0.Final\standalone
    jboss.server.config.dir = C:\wildfly-8.2.0.Final\standalone\configuration
    jboss.server.data.dir = C:\wildfly-8.2.0.Final\standalone\data
    jboss.server.deploy.dir = C:\wildfly-8.2.0.Final\standalone\data\content
    jboss.server.log.dir = C:\wildfly-8.2.0.Final\standalone\log
    jboss.server.name = wvox-000805
    jboss.server.persist.config = true
    jboss.server.temp.dir = C:\wildfly-8.2.0.Final\standalone\tmp
    line.separator = 

    logging.configuration = file:/C:/wildfly-8.2.0.Final/standalone/configuration/logging.properties
    module.path = C:/wildfly-8.2.0.Final/modules
    org.jboss.boot.log.file = C:/wildfly-8.2.0.Final/standalone/log/boot.log
    org.jboss.logmanager.nocolor = true
    org.jboss.resolver.warning = true
    org.xml.sax.driver = __redirected.__XMLReaderFactory
    os.arch = amd64
    os.name = Windows 7
    os.version = 6.1
    path.separator = ;
    program.name = JBossTools: WildFly 8.x
    sun.arch.data.model = 64
    sun.boot.class.path = C:\Program Files\Java\jre7\lib\resources.jar;C:\Program Files\Java\jre7\lib\rt.jar;C:\Program Files\Java\jre7\lib\sunrsasign.jar;C:\Program Files\Java\jre7\lib\jsse.jar;C:\Program Files\Java\jre7\lib\jce.jar;C:\Program Files\Java\jre7\lib\charsets.jar;C:\Program Files\Java\jre7\lib\jfr.jar;C:\Program Files\Java\jre7\classes
    sun.boot.library.path = C:\Program Files\Java\jre7\bin
    sun.cpu.endian = little
    sun.cpu.isalist = amd64
    sun.desktop = windows
    sun.io.unicode.encoding = UnicodeLittle
    sun.java.command = org.jboss.modules.Main -mp C:/wildfly-8.2.0.Final/modules -jaxpmodule javax.xml.jaxp-provider org.jboss.as.standalone -b localhost --server-config=standalone.xml -Djboss.server.base.dir=C:\wildfly-8.2.0.Final\standalone
    sun.java.launcher = SUN_STANDARD
    sun.jnu.encoding = Cp1252
    sun.management.compiler = HotSpot 64-Bit Tiered Compilers
    sun.os.patch.level = Service Pack 1
    sun.rmi.dgc.client.gcInterval = 3600000
    sun.rmi.dgc.server.gcInterval = 3600000
    user.country = US
    user.country.format = BR
    user.dir = C:\wildfly-8.2.0.Final\bin

共有1个答案

施英哲
2023-03-14

可能相关:我们使用的是JSF2.0,几个月前更新为JSF2.2。我必须使用这些名称空间[snip],因为新的xmlns。jcp。OrganOnes不起作用,开始破坏页面,不呈现jsf组件

这无疑是一个强有力的线索,表明您实际上没有使用JSF2.2,但仍然是一个旧版本。如果在WildFly上运行时发生这种情况,而WildFly应该已经提供了JSF2.2开箱即用,那么这意味着您的运行时类路径被多个不同的JSF版本污染,或者WildFly实例被修改。

它应该可以在库存和未修改的WildFly实例上正常工作。

 类似资料:
  • 我的web应用在将服务器从tomee plume 7升级到tomee plume 8后遇到Omnifaces cdi param问题。我用一个赤裸裸的webapp进行了测试,并证实了这一点。 我的豆子: 我的JSF视图: 我试过http://localhost:8080/test/inject2.jsf?tag=ABC它只工作一次。随后的试验得出: 如果我重新启动服务器,它也只能工作一次。 我的环

  • 问题内容: 我想添加一个类似于@RequestParam的注释,尽管它从请求属性而不是请求参数中提取值… 是否有一个示例或说明,以及如何为此创建自己的注释以及所需的处理程序/活页夹? 谢谢 问题答案: 标题为“扩展Spring MVC的注释控制器”的博客条目回答了您的问题。用Google搜索它,因为Stackoverflow不允许我创建直接链接。 基本上,您创建一个@RequestAttribut

  • 我目前正在使用RichFaces评估Java EE6/JSF2.1。 声明为 获取ID集(准备删除操作)。 通过JSF显示一个确认弹出窗口。 如果用户确认,则调用delete方法并删除在步骤1中存储ID的行。 是否必须使用和方法? 如果是的话,哪里才是调用它们的好地方呢?

  • 我正在尝试在我的JSF应用程序中使用无扩展URL。。。 我已经在使用:https://showcase.omnifaces.org/facesviews/ExtensionlessURLs这很好,但是如果我有一个带有参数的URL,它仍然带有: mypage.jsf?myparameter=12345 这里也有排除的可能性吗。jsf,因此URL将是: 我的页面?参数设置 我知道也有Prettyfac

  • 我目前正在开发一个尽可能尊重六边形架构原则的应用程序。 因此,我的“域”模块(组Id: ; 工件Id:)不依赖于任何技术框架。 我的所有服务都使用自定义注释(本身是我域的一部分)进行注释: 然而,在我的“Quarkus应用”模块(groupId:< code > acme ;artifact id:< code > app-quar kus ,我需要注入我的“域”模块中定义的服务(< code>a

  • 问题内容: 我在Team和Player类之间有一种@OneToMany关系。我想在您的玩家之间保存一个Team对象。玩家的标识符由团队外键和列表索引组成,如下所示。我有一个这样的映射,因为我需要保存Team和您的Players同时吃饭。 所以,如果我使用以下 无论是否使用@ CollectionsOfElements,Player类都需要一个@Embeddable注释,而不是一个@Entity,这