我在:formFileUpload里面的表单,在显示页面的html中,这个组件的id是form:inputFile但是当我试图从视图根目录中使用“form:inputFile”获取组件时返回为null ,但当删除“form:”时,返回是组件。组件没有在我的托管bean中设置值,有人有这个问题吗?
编辑:
<h:form id="form" enctype="multipart/form-data">
<t:inputFileUpload id="inputFile" size="40" value="#{managedBean.inputFile}"/>
</h:form>
在托管bean中:
private UploadedFile inputFile;
使用Eclipse提供的gets和sets。
//This method scans the view root and returns the component with the id passed as parameter
findComponentInRoot("form:inputFile");
返回null,但是当我使用:
时 //This method scans the view root and returns the component with the id passed as parameter
findComponentInRoot("inputFile");
返回是我正在寻找的组件,但是当我在Internet Explorer中使用View Source时,该组件的id是“form:inputFile”。
我不知道这是否相关,但是组件没有在我的托管bean中设置值,并且奇怪的是组件的id与HTML源不同。 我正在使用JSF 1.2 Mojarra。有人有这个问题吗?或者知道为什么会这样?
EDIT2: 好吧,我非常愚蠢,显然构建工作不正常,当构建从Ant更改为其他任务时它工作(仍然不知道为什么,但只是工作)。抱歉,麻烦。
答案 0 :(得分:2)
您应该使用组件binding
或UIViewRoot#findComponent()
。但这不能解决上传文件未设置的问题。要解决此问题,第一步是确保您根据Tomahawk documentation正确定义ExtensionsFilter
,因为它是负责解析multipart/form-data
请求并放置所有参数的人将上传的文件放回请求参数映射中,以便FacesServlet
可以应用它们并更新模型值。
答案 1 :(得分:0)
我猜findComponentInRoot
是this(您应该分享的一个小细节)。
无论如何,使用findComponent(..)
或getChildren(..)
始终返回页面中定义的组件的id
。 html id是由naming container:id
组成的不同内容。