我在处理包含<rich:fileUpload>
+ <a4j:mediaOutput>
组件的页面时遇到了托管 Bean ViewScoped 的问题。
当我尝试上传图像时,我总是得到一个空指针异常,上传完成后将显示(=渲染)。我的页面与 Richfaces 组件的用例非常相似:http://showcase.richfaces.org/richfaces/component-sample.jsf?demo = fileUpload&skin=blueSky
这是异常的堆栈跟踪:
Servlet.service()" 为 servlet FacesServlet 注入一个通用异常:com.sun.faces.mgbean.BeanManager$ScopeManager$ViewScopeHandler.getFromScope(BeanManager.java:563) 处的 java.lang.NullPointerException [jsf-impl-2.1. 7-jbossorg-2.jar:] 在 com.sun.faces.mgbean.BeanManager$ScopeManager.getFromScope(BeanManager.java:477) [jsf-impl-2.1.7-jbossorg-2.jar:] [...其他一些痕迹...]
我的代码是这样的:
<rich:fileUpload fileUploadListener="#{movie_Add.uploadImage}" id="upload"
acceptedTypes="jpg, gif, png, bmp"
ontyperejected="alert('Only JPG, GIF, PNG and BMP files are accepted');"
maxFilesQuantity="1" >
<a4j:ajax event="uploadcomplete" execute="@form" render="info" />
</rich:fileUpload>
<h:panelGroup id="info" layout="block">
<rich:panel bodyClass="info">
<f:facet name="header">
<h:outputText value="#{msg['admin.movies.add.image.preview']}" />
</f:facet>
<h:outputText value="#{msg['admin.movies.add.image.preview.nofiles']}"
rendered="#{movie_Add.files.size()==0}" />
<rich:dataGrid columns="1" value="#{movie_Add.files}" var="file"
rowKeyVar="row">
<rich:panel bodyClass="rich-laguna-panel-no-header">
<h:panelGrid columns="2">
<a4j:mediaOutput element="img" mimeType="image/jpeg"
createContent="#{movie_Add.paint}"
value="#{row}" style="width:130px; height:130px;"
cacheable="false">
</a4j:mediaOutput>
</h:panelGrid>
</rich:panel>
</rich:dataGrid>
</rich:panel>
</h:panelGroup>
我更改了范围,替换@ViewScoped
为@SessionScoped
,它可以工作。但是,我不想要这个范围,因为我不关心将我的信息保存在我的托管 bean 中。另外,我在这里看到了一个快速修复但仍然很脏:https :
//community.jboss.org/thread/168523 结合 SessionScoped 和 ViewScoped,这比我的第一次修复要好。
但我真的很想用只是,@ViewScoped
但也许它没用,我不知道。所以如果你能解释我为什么会得到这个异常,我可以找到一个解决方案。
提前致谢。