首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tommahawk Myfaces和CDI

Tommahawk Myfaces和CDI
EN

Stack Overflow用户
提问于 2013-12-21 13:13:00
回答 1查看 375关注 0票数 0

当我试图创建一个JSF页面来上传一个文件时,我在使用汤玛霍克面时遇到了一些问题。提到这个问题,似乎Tommahawk MyFaces与CDI不兼容,但这是正确的吗?

我的豆是这样的:

代码语言:javascript
复制
@ManagedBean
@RequestScoped
public class Bean {
private UploadedFile uploadedFile;

public void submit() throws IOException {
    String fileName = FilenameUtils.getName(uploadedFile.getName());
    String contentType = uploadedFile.getContentType();
    byte[] bytes = uploadedFile.getBytes();

    // Now you can save bytes in DB (and also content type?)

    FacesContext.getCurrentInstance().addMessage(null, 
        new FacesMessage(String.format("File '%s' of type '%s' successfully uploaded!", fileName, contentType)));
    }

    public UploadedFile getUploadedFile() {
        return uploadedFile;
    }

    public void setUploadedFile(UploadedFile uploadedFile) {
        this.uploadedFile = uploadedFile;
    }
}

但是,当我将@ManagedBean@RequestScoped替换为@Named@Model时,在部署时会收到以下警告:

001529为没有任何适当构造函数的类org.apache.myfaces.webapp.filter.TomahawkFacesContextFactory创建InjectionTarget实现。

当我用下面的JSF页面上传一个文件时,当我使用@Named@Model时,它的值为null。但是没有使用@ManagedBean' and@RequestScope. This is the.xhtml`文件,我确实使用了tommahawk:

代码语言:javascript
复制
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:t="http://myfaces.apache.org/tomahawk"
    xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <title>Tomahawk file upload demo</title>
    </h:head>
    <h:body>
        <h:form enctype="multipart/form-data">
            <t:inputFileUpload value="#{bean.uploadedFile}" />
            <h:commandButton value="submit" action="#{bean.submit()}" />
            <h:messages />
        </h:form>
    </h:body>
</html>

所以我假设CDI不喜欢tomahawk库,因为没有默认的构造函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-21 16:30:35

在查看“乞讨Java 7”时,它指定CDI1.1将任何类视为一个统计类(除其他外):

它有一个没有参数的默认构造函数,或者声明了带注释的@Inject构造函数。

TomahawkFacesContextFactory似乎没有满足这一要求。

**编辑**上面似乎是在这里确认的CDI规范。,我也切换到了PrimeFaces,这与CDI有类似的问题,但是我没有在他们的在此宣布上这样做:

PrimeFaces 5.0将附带一个由注释支持的新组件模型,并且与CDI兼容(或者是Spring或Guice!)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20719382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档