我在使用视图范围的bean时遇到了麻烦。 我在xhtml中有commandbutton,在托管bean中有相关的动作,它应该再次呈现相同的视图。 Action方法返回正常,但没有呈现视图,它在浏览器中停留了“等待localhost”消息。由于某种原因,bean的@PreDestroy方法和注入其中的ejb的@PostConstruct方法被多次调用(似乎是无常的)。 如果我将bean更改为Sessionscoped,一切正常。 我正在使用netbeans 7.2.1,使用添加的JSF框架处理Web应用程序。
xhtml部分:
<h:form id="getmovie" >
<h:panelGrid id="movienameform" columns="3" rendered="#{!MovieBean.choseMovie}">
<h:outputLabel for="moviename" value="Movie name: "/>
<h:inputText id="moviename" value="#{MovieBean.name}"/>
<h:commandButton value="submit" action="#{MovieBean.checkMovieExists()}">
</h:commandButton>
</h:panelGrid>
</h:form>
支持bean:
@Named(value = "MovieBean")
@ViewScoped
public class MovieBean implements Serializable {
private String name;
private boolean exist;
private boolean searched = false;
private boolean choseMovie = false;
@EJB
MovieejbLocal movieejb;
ScreenejbLocal screenejb;
public String checkMovieExists() {
setExist(getMovieejb().checkMovieExists(getName()));
searched = true;
return null;
}
...
}
和ejb
@Stateful
@Local(MovieejbLocal.class)
public class Movieejb implements MovieejbLocal {
....
}
我需要将此bean视为作用域而不是会话作用域。 任何想法viewScoped在这里有什么问题?
我已经看到了这个问题:@ViewScoped Managed bean loads many times during postback,但解决方案对我不起作用。
谢谢!