当前位置: 首页 > 知识库问答 >
问题:

JavaFX WebView:启动程序、输入数据、服务和显示本地HTML->Refresh Data=Refresh WebView

杨俊茂
2023-03-14

如果我关闭并重新打开,然后再点击我的按钮,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
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个答案

红砚文
2023-03-14

正如本问题中所讨论的,在webview中重新加载相同的URL不起作用。

您可能希望尝试将重新加载委托给页面本身中的JavaScript。为此,您在页面中定义了一个函数:

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

并从Java调用此函数

private void readHtml(){
    URL link = getClass().getResource("EmailSigTest.html");
    engine = webView.getEngine();
    engine.executeScript("reloadMe();"); 
}
    null
 类似资料:
  • 我正在用Spring boot编写一个程序,我的数据库是PostGRE。我对百里香有意见。我尝试输入一个localdate值,但该值仍然为空。我对字符串和int等其他值没有任何问题。

  • 我知道有几个JasperReport参数在iReport中工作,但在JasperReport Server中失败,但我在这里变得疯狂,不确定我还可以尝试什么: 查询: 参数(添加了具有以下数据的新参数): 其他都是空的。 如果我在iReport中运行它,我会得到一个提示窗口,并且可以在那里输入字符串,并且当我在预览中获得正确的数据时,报告会正确过滤掉。 为了在服务器上使用此报告,我添加了新的输入控

  • 本文向大家介绍extjs_02_grid显示本地数据、显示跨域数据,包括了extjs_02_grid显示本地数据、显示跨域数据的使用技巧和注意事项,需要的朋友参考一下 1.显示表格 2.显示本地数据 3.显示跨域jsonp数据

  • 当我在Eclipse中的服务器上运行我的应用程序时,我会得到这样的消息:“Tomcat V8.0服务器在localhost上所需的端口8080已经在使用中。该服务器可能已经在另一个进程中运行,或者某个系统进程正在使用该端口。要启动该服务器,您需要停止其他进程或更改端口号”。其他项目关闭。有人能帮我解决这个问题吗?我是爪哇初学者。

  • 5.1.1. 服务器端脚本和实用工具概述 5.1.2. mysqld-max扩展MySQL服务器 5.1.3. mysqld_safe:MySQL服务器启动脚本 5.1.4. mysql.server:MySQL服务器启动脚本 5.1.5. mysqld_multi:管理多个MySQL服务器的程序 MySQL服务器,即mysqld,是在MySQL安装中负责大部分工作的主程序。服务器随附了几个相关脚

  • 所以,我有一个main活动,它有一个启动服务的按钮,MyService。我希望该服务显示带有自定义标题、文本、图标等的通知。该服务是一个前台服务。不是绑定服务。一切正常,但唯一的一点是关于我的通知是不断显示“点击获取更多信息”,点击它会引导我进入应用程序的设置页面。尽管我的主要活动是悬而未决的。 我想要的是有一个带有自定义标题、文本、图标和停止服务的操作的通知。 这是我的主要活动。java类 我的