JSF在视图根中找不到具有表单id的组件

时间:2010-04-05 20:02:50

标签: java jsf components

我在: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更改为其他任务时它工作(仍然不知道为什么,但只是工作)。抱歉,麻烦。

2 个答案:

答案 0 :(得分:2)

您应该使用组件bindingUIViewRoot#findComponent()。但这不能解决上传文件未设置的问题。要解决此问题,第一步是确保您根据Tomahawk documentation正确定义ExtensionsFilter,因为它是负责解析multipart/form-data请求并放置所有参数的人将上传的文件放回请求参数映射中,以便FacesServlet可以应用它们并更新模型值。

答案 1 :(得分:0)

我猜findComponentInRootthis(您应该分享的一个小细节)。

无论如何,使用findComponent(..)getChildren(..)始终返回页面中定义的组件的id。 html id是由naming container:id组成的不同内容。