viewParam值未在ViewScoped bean中设置

抱歉,可能是另一个非常基本的问题 在我的ViewScoped bean中,’viewParam’看起来像是在设置,但是当我使用它时,值为null。 我在setter中设置了一个断点(setEventId()),它获取了值,但是在我的preRenderView指定的方法中,它已经消失了,所以我无法加载我想要检索的Event对象。

当我的bean是RequestScoped时,这工作正常,但我发现在POST和后续validation错误时,我的所有细节都丢失了,并且读到ViewScoped是解决此问题的方法。

我已升级到Mojarra 2.1.7,因为我认为它可能是一个错误,确实在他们的JIRA中列出了一个“关键错误”,在2.1.7中已修复,但我在Glassfish日志中validation它使用的是新版本版本,我仍然遇到同样的问题: http : //java.net/jira/browse/JAVASERVERFACES-2266

请帮忙,这是我的bean(我尝试过使用和不使用’ManagedProperty’注释)

@ViewScoped @Named public class EventController extends AbstractController { private static final Logger logger = Logger.getLogger("EventController"); /** * Request param managed property */ @ManagedProperty(value="#{param.eventId}") private Long eventId; private Event event = new Event(); /** * The event dao */ @Inject private EventDao eventDao; /** * Load the event (requires eventId has a value) * @return */ public void loadEvent() { event = eventDao.find(eventId); } /** * @return the eventId */ public Long getEventId() { return eventId; } /** * @param eventId the eventId to set */ public void setEventId(Long eventId) { this.eventId = eventId; } } 

以下是我在’listEvents’页面中构建链接的方法

    

这是需要eventId属性的页面

           

Event details for: #{eventController.event.title}

Event details

Title

您是通过CDI管理bean,而不是通过JSF管理bean。 JSF @ViewScoped注释仅适用于JSF @ManagedBean ,而不适用于CDI @Named 。 在CDI @Named您只能使用CDI范围,而不能使用JSF范围。 与CDI最接近的是@ConversationScoped 。 但是你要用一些额外的样板代码自己管理对话的开始和结束。

同样的故事适用于JSF @ManagedProperty注释。 它仅适用于JSF @ManagedBean ,而不适用于CDI @Named 。 对于CDI,您应该使用@Inject或自定义HTTP参数注释 。

JSF问题2266 无关

我有一个非常相似(如果不是确切的话)的问题。 我在Glassfish 4.0 build 89和Primefaces 4.0上使用Java EE 7。 Glassfish报道说它正在使用Mojarra 2.2.0。 我正在使用CDI类型的注释,即@Named和@javax.faces.view.Viewscoped。 我的* .xhtml文件就是这样开始的

        ... 

无论我尝试过什么,它都不会设置我的视图参数。 我读到Mojarra 2.2.1存在问题,并认为它可能与Mojarra 2.2.0相同。 Updatetool没有比我更新更新Mojarra,所以我手动完成了。 我将最新的Mojarra实现从http://repo1.maven.org/maven2/org/glassfish/javax.faces/2.2.5/复制到$ GLASSFISH_HOME / glassfish / modules目录中,并将其重命名为javax.faces.jar并备份现有的javax.faces.jar文件。 重新启动Glassfish,据报道它现在正在使用Mojarra 2.2.5。 问题消失了,代码运行良好。