JSF命令按钮不调用bean方法

时间:2017-02-18 23:06:21

标签: jsf file-upload primefaces

我的jsf命令按钮没有调用它应该调用的方法。这是代码:

    <h:form>

            <h:outputText value="Data de nascimento"
                style="font-size: 15px; float:left;margin-left:20%;" />
            <br />
            <h:inputText value="#{registroPageMBean.usuario.nascimento}"
                styleClass="default_input"
                style="float:left;margin-left:20%;width:60%"></h:inputText>

            <h:outputText value="Foto de Perfil"
                style="font-size: 15px; float:left;margin-left:20%;" />
            <br />
            <p:fileUpload value="#{registroPageMBean.file}" mode="simple"
                skinSimple="true" label="Enviar arquivo" />

            <br />
            <br />
            <br />
            <h:commandButton rendered="true" styleClass="default_button" value="Finalizar"
                action="#{registroPageMBean.registrar}" />
        </h:form>

我尝试了一切,但它没有奏效。任何人都可以帮我这个吗?

这是Bean方法:

@RequestScoped
@ManagedBean(name = "registroPageMBean")
public class RegistroPageMBean {
private Usuario usuario;
private UploadedFile file;

public RegistroPageMBean() {
    usuario = new Usuario();
    System.out.println("INICIANDO");
}

public static BufferedImage toBufferedImage(Image img) {
    if (img instanceof BufferedImage) {
        return (BufferedImage) img;
    }

    // Create a buffered image with transparency
    BufferedImage bimage = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);

    // Draw the image on to the buffered image
    Graphics2D bGr = bimage.createGraphics();
    bGr.drawImage(img, 0, 0, null);
    bGr.dispose();

    // Return the buffered image
    return bimage;
}

public static void saveToFile(BufferedImage img) throws FileNotFoundException, IOException {

    File outputfile = new File("imagem.png");
    ImageIO.write(img, "png", outputfile);
}

public void registrar() {
    System.out.println("SALVANDO");
    try {

        Image image = ImageIO.read(file.getInputstream());

        saveToFile(toBufferedImage(image));

        usuario.setPerfil(image);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public Usuario getUsuario() {
    return usuario;
}

public void setUsuario(Usuario usuario) {
    this.usuario = usuario;
}

public UploadedFile getFile() {
    return file;
}

public void setFile(UploadedFile file) {
    this.file = file;
}

我在另一个XHTML页面中做了类似这样的代码,但它确实有效。所以我把那个命令按钮放在另一个页面中它给了我一个我以前从未见过的 NullPointerException

谢谢!

2 个答案:

答案 0 :(得分:0)

您确定上传的文件不是空的吗?尝试在registrar()方法中运行调试。

如果不是问题,请发布堆栈跟踪。 &#34;一个堆栈跟踪价值千言万语。

答案 1 :(得分:0)

这是它工作的另一个XHTML

<h:body
style="background-color: #2b5dad;width:100%;height:100%;margin:0px;">
<div class="lay_page">
    <div style="width: 100%; height: 100%; padding-top: 3.5%;">
        <h:outputText styleClass="title_font" value="PROTÓTIPO ALPHA" />
    </div>
</div>
<div class="lay_page_center">
    <div class="lay_page_center_center">
        <h3 class="default_font">Login</h3>
        <h:form>
            <h:outputText value="Email"
                style="font-size: 15px; float:left;margin-left:20%;" />
            <br />
            <h:inputText value="#{loginPageMBean.email}"
                styleClass="default_input"
                style="float:left;margin-left:20%;width:60%"></h:inputText>
            <br />
            <h:outputText value="Senha"
                style="font-size: 15px; float:left;margin-left:20%;" />
            <br />
            <h:inputSecret value="#{loginPageMBean.senha}"
                styleClass="default_input"
                style="float:left;margin-left:20%;width:60%" />
            <br />
            <br />
            <br />
            <h:commandButton styleClass="default_button" value="Login"
                action="#{loginPageMBean.login}"></h:commandButton>
            <h:commandButton styleClass="default_button" value="Registrar"
                action="register_page.xhtml"></h:commandButton>
            <h:commandButton styleClass="default_button" value="Próximo passo"
                action="#{registroPageMBean.registrar}"></h:commandButton>
        </h:form>
    </div>
</div>
<div class="lay_page"></div>