0

こんにちは、私は問題を抱えています。私はプロパティ ファイルを持っています。これはすべての保存場所を保存します。次の方法でこのファイルからデータを取得します。

public void loadProp() {
        System.out.println("Loading properties");
        InputStream in = this.getClass().getClassLoader().getResourceAsStream("config.properties"); //points to a properties file, this will load up destinations instead of having to declare them here
        try {
            configProp.load(in);
            System.out.println(configProp.getProperty("destinationPDF"));
            System.out.println(configProp.getProperty("destination"));
            System.out.println(configProp.getProperty("fileList"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("called get username");
        username = FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
        System.out.println(username);


    }

次に、これを行って値を宛先に割り当てます

public String destination = configProp.getProperty("destination");

しかし、宛先を使用するたびにnull値を取得しますが、 configProp.getProperty("destination") を使用するとフルパスが取得されます。他のクラスが依存しているため、値を宛先を指すようにしたいので、ここで何が間違っていますかそれ

編集 :

This class is called on by a command button (web app)

    @ViewScoped
    @ManagedBean(name = "fileUploadController")
    public class FileUploadController {

        public boolean isUploadComplete() { //to enable the next button once finished
            return uploadComplete;
        }

        public void setUploadComplete(boolean uploadComplete) {
            this.uploadComplete = uploadComplete;
        }

        public boolean isUploadComplete2() {
            //to disable the file upload button, this will stop users uploading multiple files and over writing them as only the last file uploaded will be used
            return uploadComplete;
        }

        public void setUploadComplete2(boolean uploadComplete) {
            this.uploadComplete = uploadComplete;
        }
        /*
         public void handleFileUpload(FileUploadEvent event) {
         System.out.println("called");
         FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded.");
         FacesContext.getCurrentInstance().addMessage(null, msg);
         }
         }
         */
        //
        //Strings for fileUpload
        //oadProp() 
        //public String fileList = "D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/Directory Files/directoryFiles.txt"; //
        private Properties configProp = new Properties();

        @PostConstruct
        //System.out.println(destinationPDF);
        //System.out.println(destination);
    // Get the username from the login page, this is used to create a folder for each user
        public void loadProp() {
            System.out.println("Loading properties");
            InputStream in = this.getClass().getClassLoader().getResourceAsStream("config.properties"); //points to a properties file, this will load up destinations instead of having to declare them here
            try {
                configProp.load(in);
                System.out.println(configProp.getProperty("destinationPDF"));
                System.out.println(configProp.getProperty("destination"));
                System.out.println(configProp.getProperty("fileList"));
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println("called get username");
            username = FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
            System.out.println(username);


        }
//String destinationPDF = configProp.getProperty("destinationPDF"); Always makes a null no idea why yet
    //private String destinationPDF = configProp.getProperty("destinationPDF");
    public String destination = configProp.getProperty("destination");
    private String username;
    //public static String destination = "D:/Documents/NetBeansProjects/printing~subversion/fileupload/uploaded/"; // main location for uploads//TORNADO ONLY //"D:/My Documents/NetBeansProjects/printing~subversion/fileupload/uploaded/"; // USE ON PREDATOR ONLY 
    public static String NewDestination;
    public static String UploadedfileName;
    public static String CompletefileName;
    //
    //Strings for file copy
    //
    //private String destinationPDF = "D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/pdf/"; //USE ON TORNADO//"D:/My Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/pdf/";//USE ON PREDATOR    
    private String NewdestinationPDF;
    public static String PdfLocationViewable;
    private boolean uploadComplete;
    private boolean uploadComplete2;

    //
    public void File() {

上記はそのクラスの最初のコードです

コンソールの出力は次のとおりです。

INFO: buttonToUploadText invoked
INFO: Loading properties
INFO: D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/pdf/
INFO: D:/Documents/NetBeansProjects/printing~subversion/fileupload/Uploaded/
INFO: D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/Directory Files/directoryFiles.txt
INFO: called get username
INFO: null
INFO: destination is null
4

2 に答える 2

1

この行を置き換えます

public String destination = configProp.getProperty("destination");

public String destination;

コンストラクターを提供します。

public FileUploadController() {
    loadProp();
    this.destination = configProp.getProperty("destination");
}

これでloadProp()、コンストラクターによって呼び出されます。これを行う必要はありません。

于 2013-02-19T16:36:32.123 に答える
1

ご注文はオフです。Bean がコンテナーによってインスタンス化されると、次のようになります。

  1. コンストラクターが呼び出されます
  2. 注入されたすべてのフィールドが解決されます
  3. PostConstruct が呼び出されます。

現在、プロパティが読み込まれるdestinationに値を設定しています。この問題に対する非常に簡単な解決策は、 @PostConstruct ハンドラーに値を設定することです。destination

@PostConstruct
public void loadProp() {
    InputStream in = this.getClass().getClassLoader()
            .getResourceAsStream("config.properties");
    try {
        configProp.load(in);
    } catch (IOException e) {
        e.printStackTrace();
    }

    destination = configProp.getProperty("destination");
}

他のメソッドに対するこのメソッドの利点の 1 つは、(1 回だけではなく) メソッドが呼び出されるdestinationたびにプロパティが正しく設定されることです。loadProp

于 2013-02-19T16:40:50.537 に答える