запись содержимого JSF inputText в файл - PullRequest
4 голосов
/ 11 октября 2011

Мне нужно выяснить способ записи содержимого inpuText JSF в файл.Я хочу создать небольшой пользовательский интерфейс, который предоставит пользователю возможность написать некоторые математические формулы более простым способом (следовательно, пользовательский интерфейс) и сможет сохранять их в .txt (или что-то подобное) файл.Я пытался в течение 8-10 часов, и лучшее, что я получил, это:

<h:inputText value="#{output.inputContent}" id="inputContent"></h:inputText>

И Боб:

import com.sun.faces.taglib.html_basic.InputTextTag;
import java.awt.event.ActionListener;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.servlet.http.HttpServletRequest;


@ManagedBean(name = "output")
@SessionScoped
public class OutputHandler {
    public String inputContent;

    public String getinputContent() {
        return inputContent;
    }

    public void setinputContent(String inputContent) {
        this.inputContent = inputContent;
    }
    public void writeStream()
    {

        try{
            FileOutputStream fos=new FileOutputStream("outputOne.txt");
           ObjectOutputStream output=new ObjectOutputStream(fos);

          output.writeObject(inputContent);

        }
        catch(Exception ex){
            System.out.println("Exception is: "+ex);

        }       
    }

}

Я почти уверен, что большинствоЯ понял, что это неправильно, поэтому любая помощь будет оценена, даже если есть некоторые указания к сообщениям, которые касаются схожих проблем, поэтому я могу попытаться получить их оттуда.Я не хочу, чтобы меня обманывают или что-то в этом роде, проблема в том, что я никогда не работал с JSF (я начал читать об этом вчера), так что, как я уже сказал, даже некоторые ссылки на некоторую документацию могут помочь мне (я гуглялс ума с тех пор, как я начал) или направлять меня немного будет принята с благодарностью.

1 Ответ

2 голосов
/ 11 октября 2011

С ObjectOutputStream вы в основном сериализуете a String объект на выходе. В результате получается , а не текстовый файл, читаемый человеком, с исходным значением строки.

Вам необходимо использовать Writer, в котором вы передаете значение строки в.

public void writeStream() throws IOException {
    Writer writer = new FileWriter("outputOne.txt");

    try {
        writer.write(inputContent);
    } finally {
        writer.close();
    }
}

В результате получится текстовый файл, читаемый человеком, с исходным значением строки.


Не имеет отношения к конкретной проблеме , обратите внимание, что использование относительных путей в файловом вводе-выводе является крайне плохой идеей. Вы никогда не знаете наверняка, где это закончится, и в некоторых средах рабочий каталог также не доступен для записи. Всегда явно указывайте абсолютный путь к существующей и доступной для записи папке:

    Writer writer = new FileWriter("/path/to/outputOne.txt");

В средах Windows, где сервер устанавливается и запускается с диска C:\, вышеуказанный путь в основном совпадает с C:\path\to\outputOne.txt. При необходимости вы можете настроить корневой каталог в качестве аргумента виртуальной машины или настройки файла конфигурации. Предполагая, что вы передаете -Doutput.location=/path/to аргумент VM, вы можете использовать его следующим образом:

    File root = new File(System.getProperty("output.location"));
    Writer writer = new FileWriter(new File(root, "outputOne.txt"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...