Действие beans-компонента ConversationScoped не запущено с использованием визуализированной командной ссылки
У меня проблемы с пониманием, почему метод действия на моем компоненте ConversationScope не сработает. Боб это:
package org.work;
import java.io.Serializable;
import javax.enterprise.context.ConversationScoped;
import javax.faces.event.ComponentSystemEvent;
import javax.inject.Named;
@Named
@ConversationScoped
public class NewClass implements Serializable {
private static final long serialVersionUID = 6470665657635110586L;
private boolean b1;
public boolean isB1() {
return b1;
}
public void setB1(boolean b1) {
this.b1 = b1;
}
public void preRenderView(ComponentSystemEvent evt) {
}
public String peformAction() {
return null;
}
}
и мой XHTML это:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<f:view>
<h:head>
</h:head>
<f:metadata>
<f:viewParam name="b1"
value="#{newClass.b1}" />
<f:event type="preRenderView"
listener="#{newClass.preRenderView}"/>
</f:metadata>
<h:body>
<h:form>
<h:commandLink action="#{newClass.setB1(!newClass.b1)}"
style="background-color: #{newClass.b1 ? 'darkorchid' : 'aquamarine'};"
value="btn3"/>
<h:panelGrid rendered="#{newClass.b1}"
columns="1">
<h:commandLink value="edit"
action="#{newClass.peformAction()}" />
</h:panelGrid>
</h:form>
</h:body>
</f:view>
</html>
Метод executeAction() не запускается после того, как я нажимаю commandLink, который должен инвертировать логическое значение, создающее другой commandLink. При отладке я вижу, что логическое значение установлено в true, но мне кажется, что атрибут "рендеринг" оценивается до того, как будет задан viewparams. Это правда? Пример отлично работает с @ManagedBean и @javax.faces.bean.ViewScoped.
1 ответ
Я думаю, что у вас нет продолжительного разговора. Вы можете прочитать дополнительную информацию на этом сайте: http://docs.oracle.com/javaee/6/api/javax/enterprise/context/ConversationScoped.html
Если у вас временный разговор, этот бин воссоздается после каждого запроса