1

我一直在尝试对Seam WeldMyFaces CODI进行一些简单的测试。将 CODI jar 文件添加到我的项目后,我发现它会为每个请求添加一个windowId请求值,即使 bean 范围是RequestScoped也是如此。当 bean 在RequestScoped中时,是否真的有必要为每个请求添加windowId请求参数?这种情况下是否有任何实际的现实场景?如果没有必要,是否可以删除它?例如:

这是bean类的代码:

import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

@Named("myBean")
@RequestScoped
public class MyBean{
private String firstName;
private String lastName;

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}
}

这是页面的正文:

<body>
<h:form>
<h:inputText value="#{myBean.firstName}"></h:inputText>
<br/>
<h:inputText value="#{myBean.lastName}"></h:inputText>
<br/>
<h:commandButton value="submit"></h:commandButton>
</h:form>
</body>
4

2 回答 2

3

Apache MyFaces CODI 添加了 windowId 以支持浏览器选项卡分隔的 bean。如果您使用一些 CODI 范围,例如 @WindowScoped、@ViewAccessScoped、CODIs @ConversationScoped,那么您将为每个浏览器选项卡获得一个单独的上下文实例。

假设您有一个客户关系管理应用程序。使用 CODI @WindowScoped,您可以在不同的浏览器选项卡/窗口中打开不同的客户。你会使用@SessionScoped,那么你每次都会覆盖这些值(对于@SessionScoped bean,每个会话只有1个上下文实例)。

当然,您可以很容易地禁用此功能。请查看我们的官方 WIKI: https ://cwiki.apache.org/confluence/display/EXTCDI/Index

于 2011-10-18T16:48:37.330 回答
3

在官方 wiki 中找到解决方案需要一些时间。https://cwiki.apache.org/confluence/display/EXTCDI/Index

如果你不使用@WindowScoped、@ViewAccessScoped 并且确定你不需要这个 windowId 参数,那么你可以在你的项目中创建这样的类:

@Specializes
@ApplicationScoped
public class CustomWindowContextConfig extends WindowContextConfig {

    @Override
    public boolean isAddWindowIdToActionUrlsEnabled() {
        return false;
    }

    @Override
    public boolean isUrlParameterSupported() {
        return false;
    }
}
于 2013-02-21T08:24:14.100 回答