1

JSFを使用して.pdfファイルをサーバー上の指定されたフォルダーにアップロードする次のページがあります。ただし、println() が表示されず、メッセージが更新されないため、commandButton アクションはまったく起動していないようです。誰かが問題を説明できれば、それは大歓迎です。

XHTML ページ:

    <?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:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:t="http://myfaces.apache.org/tomahawk"
    xmlns:f="http://java.sun.com/jsf/core" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="keywords" content="enter,your,keywords,here" />
        <meta http-equiv="description"
            content="A short description of this page." />
        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />

        <link rel="stylesheet" type="text/css" href="Styles/style.css" />
        <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery/jquery-1.7.2.min.js"></script>
    </head>
    <body>


        <h:form enctype="multipart/form-data">
            <h:outputText value="First Name: " />
            <h:inputText id="fname" size="40" value="#{userBean.firstName}" required="true"/> <br/>
            <h:outputText value="Last Name: " />
            <h:inputText id="lname" size="40" value="#{userBean.lastName}" required="true"/> <br/>
            <h:outputText value="Position Sought: "/>
            <h:inputText id="position" size="40" value="#{userBean.position}" required="true"/> <br/>
            <h:outputText value="File to upload: " />
            <t:inputFileUpload value="#{userBean.resume}" /> <br/>
            <h:commandButton value="submit" action="#{userBean.submit}" />
            <h:messages />
        </h:form>

    </body>
</html>

顔:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xi="http://www.w3.org/2001/XInclude"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
 <managed-bean>
  <managed-bean-name>userProcessor</managed-bean-name>
  <managed-bean-class>com.logic.UserProcessor</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
  <managed-property>
   <property-name>ID</property-name>
   <property-class>java.lang.String</property-class>
   <value/>
  </managed-property>
  <managed-property>
   <property-name>firstName</property-name>
   <property-class>java.lang.String</property-class>
   <value/>
  </managed-property>
  <managed-property>
   <property-name>lastName</property-name>
   <property-class>java.lang.String</property-class>
   <value/>
  </managed-property>
  <managed-property>
   <property-name>password</property-name>
   <property-class>java.lang.String</property-class>
   <value/>
  </managed-property>
  <managed-property>
   <property-name>resume</property-name>
   <property-class>java.lang.String</property-class>
   <value/>
  </managed-property>
  <managed-property>
   <property-name>username</property-name>
   <property-class>java.lang.String</property-class>
   <value/>
  </managed-property>
 </managed-bean>
 <managed-bean>
  <managed-bean-name>userBean</managed-bean-name>
  <managed-bean-class>com.logic.UserBean</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
  <managed-property>
   <property-name>id</property-name>
   <property-class>java.lang.String</property-class>
   <value/>
  </managed-property>
  <managed-property>
   <property-name>username</property-name>
   <property-class>java.lang.String</property-class>
   <value/>
  </managed-property>
  <managed-property>
   <property-name>password</property-name>
   <property-class>java.lang.String</property-class>
   <value/>
  </managed-property>
  <managed-property>
   <property-name>firstName</property-name>
   <property-class>java.lang.String</property-class>
   <value/>
  </managed-property>
  <managed-property>
   <property-name>lastName</property-name>
   <property-class>java.lang.String</property-class>
   <value/>
  </managed-property>
  <managed-property>
   <property-name>position</property-name>
   <property-class>java.lang.String</property-class>
   <value/>
  </managed-property>
  <managed-property>
   <property-name>resume</property-name>
   <property-class>org.apache.myfaces.custom.fileupload.UploadedFile</property-class>
   <value/>
  </managed-property>
 </managed-bean>
 <navigation-rule>
  <from-view-id>/addUser.xhtml</from-view-id>
  <navigation-case>
   <from-outcome>failure</from-outcome>
   <to-view-id>/addUser.xhtml</to-view-id>
  </navigation-case>
  <navigation-case>
   <from-outcome>success</from-outcome>
   <to-view-id>/Home_Menu.xhtml</to-view-id>
  </navigation-case>
 </navigation-rule>
 <navigation-rule>
  <from-view-id>/Home_Menu.xhtml</from-view-id>
 </navigation-rule>
 <navigation-rule>
  <from-view-id>/login.xhtml</from-view-id>
  <navigation-case>
   <from-outcome>failure</from-outcome>
   <to-view-id>/login.xhtml</to-view-id>
  </navigation-case>
  <navigation-case>
   <from-outcome>success</from-outcome>
   <to-view-id>/Home_Menu.xhtml</to-view-id>
  </navigation-case>
 </navigation-rule>
 <navigation-rule>
  <from-view-id>/upload_resume.xhtml</from-view-id>
  <navigation-case>
   <from-action>#{userBean.submit}</from-action>
   <from-outcome>success</from-outcome>
   <to-view-id>/Home_Menu.xhtml</to-view-id>
  </navigation-case>
  <navigation-case>
   <from-action>#{userBean.submit}</from-action>
   <from-outcome>failure</from-outcome>
   <to-view-id>/upload_resume.xhtml</to-view-id>
  </navigation-case>
 </navigation-rule>
</faces-config>

そして bean.submit()

  public String submit() throws IOException {
        String fileName = FilenameUtils.getName(resume.getName());
        String contentType = resume.getContentType();
        InputStream is = resume.getInputStream();
        byte[] bytes = resume.getBytes();

        Date date = new Date();
        String ext = FilenameUtils.getExtension(fileName);
        System.out.println("File upload started");
        System.out.println("File name: " + fileName);
        System.out.println("Timestamp: " + contentType);
        System.out.println("Content type: " + date.toString());
        System.out.println("File extension: " + ext);

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

        if(ext != "pdf"){
            FacesContext.getCurrentInstance().addMessage(null, 
                    new FacesMessage(String.format("File upload failed, please make sure that your file has the correct extension (.pdf)")));
            System.out.println("File upload failed: incorrect file extension.");
            return "failure";
        } else {
            writeInfoToDB();
            is.read(bytes);

            String folder = getFirstName().charAt(0) + getLastName();                           //will not work if folder does not exist
            File file = new File("C:\\Users\\MAR-PC01\\Desktop\\apache-tomcat-7.0\\uploads\\" 
                                 + folder + "\\" + fileName);
            file.createNewFile();
            FileOutputStream fos = new FileOutputStream(file);
            fos.write(bytes);

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

            return "success";
        }
    }
4

1 に答える 1

5

multipart/form-dataこのフォームは、デフォルトではJSFでサポートされていないエンコーディングを使用して送信されます。Tomahawkがドキュメントに従ってExtensionsFilter適切に登録されている場合にのみ機能します。このフィルターは、JSFが要求パラメーター(つまり、送信された値と呼び出されたアクション)を通常の方法で透過的に適用できるように、要求を解析し、個々の部分を通常の要求パラメーターに変換する役割を果たします。web.xmlmultipart/form-dataform-data

が登録されていない場合、ExtensionsFilterおよび/またはWebアプリの他の妨害要因のためにその仕事を適切に行うことができない場合、フォーム送信はJSFポストバックライフサイクルに入ることがありません。

参照:

于 2012-07-30T18:29:39.377 に答える