2016-01-15 2 views
0

Мне нужно иметь возможность открывать мое приложение, вводить данные через TextFields, отправлять указанные данные через FreeMarker и генерировать HTML, а затем отображать в WebView.JavaFX WebView: запуск программы, ввод данных, обслуживание и отображение локального HTML -> обновление данных = обновление WebView

Здесь я падаю.

У меня все работает, но я не могу, для жизни меня, выяснить, как обновить WebView, чтобы отобразить НОВЫЙ текущий HTML-документ после ввода данных и переписать.

Это переписывает файл в порядке, если я закрываю и снова открываю, а затем повторно нажимаю кнопку, WebView теперь показывает новые данные.

Я уверен, что проблема в том, что я использую GetClass() getResource (String):.

URL link = getClass().getResource("EmailSigTest.html"); 
engine = webView.getEngine(); 
engine.load(link.toString()); 

Как я могу получить эту вещь, чтобы изменить динамически, то есть:

1. Input data 
2. Write File 
3. Refresh WebView to reflect new html doc 

Где мне нужно писать и читать файл туда и обратно, чтобы это произошло?

Я пробовал engine.reload(); для перезагрузки WebEngine ... ничего.

Я попытался добавить ActionEvent и .reload() ... ничего.

Полный Источник Ниже:

public class SignatureGenFXMLDocController implements Initializable { 
    private String firstName, lastName, directLine, title, cellPhone, lineOne, lineTwo; 
    boolean social = false; 
    @FXML private TextField txtFirstName, txtLastName, txtDirectLine, txtTitle, txtCellPhone; 
    @FXML private CheckBox chkSocialIcons; 
    @FXML Button btnGenerate; 
    @FXML WebView webView; 
    @FXML WebEngine engine; 

    @FXML private void handleButtonAction(ActionEvent event) throws InterruptedException { 
     System.out.println("You clicked me!"); 
     firstName = txtFirstName.getText(); 
     lastName = txtLastName.getText(); 
     directLine = txtDirectLine.getText(); 
     title = txtTitle.getText(); 
     cellPhone = txtCellPhone.getText(); 

     writeHtml(); 
     readHtml(); 
    } 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 

    } 
    private void writeHtml(){ 
     // Configurae Freemarker 
    Configuration cfg = new Configuration(); 
    try { 
     // Load the template 
     Template template = cfg.getTemplate("src/signaturegen/template.ftl"); 
     Map<String, Object> data = new HashMap<String, Object>(); 

      data.put("fName", firstName); 
      data.put("lName", lastName); 
      data.put("title", title); 
      data.put("dLine", directLine); 
      data.put("social", social); 

      Writer console = new OutputStreamWriter(System.out); 
      template.process(data, console); 
      console.flush(); 
      // File output 
      Writer file = new FileWriter (new File("build/classes/signaturegen/EmailSigTest.html")); 
      template.process(data, file); 
      file.flush(); 
      file.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (TemplateException e) { 
      e.printStackTrace(); 
     } 
    }  
    private void readHtml(){ 
     URL link = getClass().getResource("EmailSigTest.html"); 
     engine = webView.getEngine(); 
     engine.load(link.toString()); 
    } 
} 

ответ

1

Как обсуждалось в this question, перезарядка тот же URL в WebView не работает.

Возможно, вы захотите попробовать перезагрузить JavaScript на самой странице. Для этого необходимо определить функцию на странице:

function reloadMe() { 
    location.reload(); 
} 

И эта функция вызывается из Java:

private void readHtml(){ 
    URL link = getClass().getResource("EmailSigTest.html"); 
    engine = webView.getEngine(); 
    engine.executeScript("reloadMe();"); 
} 

Дальнейшее чтение: