MyFaces CODI и проблема с параметром запроса windowId - PullRequest
1 голос
/ 18 октября 2011

Я пытался провести несколько простых тестов на Сварка шва и MyFaces CODI . После добавления jar-файлов CODI в мои проекты я обнаружил, что он добавляет значение windowId к каждому запросу, даже если область действия компонента RequestScoped . Действительно ли необходимо добавлять windowId параметр запроса к каждому запросу, пока компонент находится в RequestScoped ? Есть ли практический реальный сценарий для этого случая? Можно ли это убрать, если в этом нет необходимости? Например:

Это код класса бобов:

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>

Ответы [ 2 ]

3 голосов
/ 21 февраля 2013

Требуется некоторое время, чтобы найти решение в официальной вики.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;
    }
}
3 голосов
/ 18 октября 2011

Apache MyFaces CODI добавляет windowId для поддержки отдельных бинов браузера. Если вы используете некоторые области CODI, такие как @WindowScoped, @ViewAccessScoped, CODIs @ConversationScoped, вы получите отдельный контекстный экземпляр для каждой вкладки браузера.

Предположим, у вас есть приложение для управления отношениями с клиентами. С CODI @WindowScoped вы можете открывать разных клиентов в разных вкладках / окнах браузера. Если бы вы использовали @SessionScoped, вы бы каждый раз перезаписывали значения (для бинов @SessionScoped для каждой сессии есть только 1 контекстный экземпляр).

И, конечно, вы можете довольно легко отключить эту функцию. Пожалуйста, проверьте наш официальный WIKI: https://cwiki.apache.org/confluence/display/EXTCDI/Index

...