чтобы решить эту проблему. Я не могу сказать вам, лучше ли Seam или CODI, но, по крайней мере, это позволяет мне двигаться дальше, пытаясь разобраться в прицеле и приступить к кодированию приложения.
рен, что почему, но мой видоисканный компонент не сохраняется при повторном отображении той же страницы. Мне интересно, если это из-за использования шаблонов Facelet?
Вот что я сделал, чтобы помочь мне решить проблему:
Добавьте метод @PostConstruct и отлаживайте оттудаДобавьте некоторую отладку в метод установки и полученияОтладка ViewScoped, кажется, имеет много вызовов методов PostConstructИ да, состояние не сохраняется (отправьте, установите флаг в значение true, но при повторном отображении флага снова возвращается значение false)Попробуйте изменить область действия на сеанс, при сообщении об ошибке «org.glassfish.deployment.common.DeploymentException: WELD-000072 Управляемый компонент, объявляющий пассивирующую область, должен быть пассивирован» при перезапуске моей стеклянной рыбы. Пришлось сделать сериализуемым мой бин, чтобы пропустить эту ошибку.И в bean области действия сеанса PostConstruct вызывается только один раз, и состояние сохраняетсяИнтересно, что пошло не так с моим чехлом ViewScope?
Вот мой файл facelet: "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<h:head>
<title>#{msgs.title}</title>
<h:outputStylesheet library="css" name="main.css" />
</h:head>
<h:body>
<ui:composition template="/template/masterlayout.xhtml">
<ui:define name="windowTitle">Checkbox Lab</ui:define>
<ui:define name="heading">Checkbox Lab</ui:define>
<ui:define name="content">
<h:form>
<p:messages id="messages" globalOnly="true"/>
<h:panelGrid columns="3" styleClass="bordered">
<h:outputLabel for="Married" value="Married" />
<h:selectBooleanCheckbox label="Married" id="Married"
value="#{checkboxLabBean.married}" />
<p:message for="Married"/>
<p:panel header="debug info" id="debugPanel"
toggleable="true" toggleSpeed="300" >
<h:panelGrid columns="2">
<h:outputText value="rendered :"/>
#{checkboxLabBean.submitted}
<h:outputText value="married status :"/>
#{checkboxLabBean.married}
</h:panelGrid>
</p:panel>
</h:panelGrid>
<h:commandButton value="Refresh"
action="#{checkboxLabBean.submit}"/>
</h:form>
</ui:define>
</ui:composition>
</h:body>
</html>
А вот и мой боб:
package user.ui;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.faces.bean.ViewScoped;
import javax.inject.Named;
@Named
@ViewScoped
public class CheckboxLabBean implements Serializable {
private boolean married = true;
private boolean submitted;
@PostConstruct
public void debugPostConstruct() {
System.out.println("Post Construct !");
}
public boolean isMarried() {
return married;
}
public void setMarried(boolean married) {
this.married = married;
}
public boolean isSubmitted() {
System.out.println("returning submit : " + this.submitted);
return submitted;
}
public void setSubmitted(boolean submitted) {
this.submitted = submitted;
}
public String submit() {
System.out.println("setting submit to true");
this.submitted = true;
return null;
}
}
Вот вывод моих журналов видимости и сеанса:
вид с ограничением впервые открывается после перезапуска веб-приложения:
[# | 2010-12-24T11: 01: 11,307 + 0700 | INFO | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 34; _ThreadName = Thread-1 ; | Постстроить! | #]
[# | 2010-12-24T11: 01: 11,310 + 0700 | INFO | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 34; _ThreadName = Thread-1 ; | Постстроить! | #]
[# | 2010-12-24T11: 01: 11,310 + 0700 | INFO | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 34; _ThreadName = Thread-1 ; | возвращая отправить: ложь | #]
[# | 2010-12-24T11: 01: 11,311 + 0700 | INFO | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 34; _ThreadName = Thread-1 ; | Постстроить! | #]
[# | 2010-12-24T11: 01: 11,322 + 0700 | INFO | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 34; _ThreadName = Thread-1 ; | Постстроить! | #]
[# | 2010-12-24T11: 01: 11,322 + 0700 | INFO | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 34; _ThreadName = Thread-1 ; | Постстроить! | #]
вид с ограничением после нажатия на кнопку обновления
[# | 2010-12-24T11: 02: 46,129 + 0700 | INFO | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 37; _ThreadName = Thread-1 ; | Постстроить! | #]
[# | 2010-12-24T11: 02: 46,130 + 0700 | INFO | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 37; _ThreadName = Thread-1 ; | Постстроить! | #]
[# | 2010-12-24T11: 02: 46,131 + 0700 | INFO | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 37; _ThreadName = Thread-1 ; | Постстроить! | #]
[# | 2010-12-24T11: 02: 46,131 + 0700 | INFO | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 37; _ThreadName = Thread-1 ; | Постстроить! | #]
[# | 2010-12-24T11: 02: 46,131 + 0700 | INFO | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 37; _ThreadName = Thread-1 ; | параметр submit в true | #]
[# | 2010-12-24T11: 02: 46,133 + 0700 | INFO | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 37; _ThreadName = Thread-1 ; | Постстроить! | #]
[# | 2010-12-24T11: 02: 46,134 + 0700 | INFO | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 37; _ThreadName = Thread-1 ; | Постстроить! | #]
[# | 2010-12-24T11: 02: 46,134 + 0700 | INFO | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 37; _ThreadName = Thread-1 ; | возвращая отправить: ложь | #]
[# | 2010-12-24T11: 02: 46,134 + 0700 | INFO | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 37; _ThreadName = Thread-1 ; | Постстроить! | #]
[# | 2010-12-24T11: 02: 46,136 + 0700 | INFO | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 37; _ThreadName = Thread-1 ; | Постстроить! | #]
[# | 2010-12-24T11: 02: 46,136 + 0700 | INFO | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 37; _ThreadName = Thread-1 ; | Постстроить! | #]
объем сессии впервые открывается после перезапуска веб-приложения:
[# | 2010-12-24T10: 58: 54,610 + 0700 | ИНФО | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 32; _ThreadName = резьба-1 ; | Постстроить! | #]
[# | 2010-12-24T10: 58: 54,612 + 0700 | ИНФО | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 32; _ThreadName = резьба-1 ; | возвращая отправить: ложь | #]
объем сессии после нажатия на кнопку обновления:
[# | 2010-12-24T10: 59: 14.613 + 0700 | INFO | glassfish3.0.1 | org.hibernate.validator.engine.resolver.DefaultTraversableResolver | _ThreadID = 37; _ThreadName = Thread-1; | Создан экземпляр org. hibernate.validator.engine.resolver.JPATraversableResolver |. #]
[# | 2010-12-24T10: 59: 14,615 + 0700 | ИНФО | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 37; _ThreadName = резьба-1 ; | параметр submit в true | #]
[# | 2010-12-24T10: 59: 14,617 + 0700 | ИНФО | glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 37; _ThreadName = резьба-1 ; | возвращая отправить: true | #]