Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单击AjaxLink时如何显示标签组件_Java_Html_Wicket_Wicket 6 - Fatal编程技术网

Java 单击AjaxLink时如何显示标签组件

Java 单击AjaxLink时如何显示标签组件,java,html,wicket,wicket-6,Java,Html,Wicket,Wicket 6,单击Ajaxlink时,我需要显示JSON文件中的数据。我已经实现了以下不起作用的代码。如果我有任何错误,请更正我的代码。是否可以在AjaxLink内添加标签 提前谢谢 AjaxLink<Void> jsonData = new AjaxLink<Void>("jsonData") { @Override public void onClick(AjaxRequestTarget target) {

单击Ajaxlink时,我需要显示JSON文件中的数据。我已经实现了以下不起作用的代码。如果我有任何错误,请更正我的代码。是否可以在AjaxLink内添加标签

提前谢谢

AjaxLink<Void> jsonData = new AjaxLink<Void>("jsonData") {

            @Override
            public void onClick(AjaxRequestTarget target) {
                File jsonFile;
                try {
                    jsonFile = new File(fileLocation);

                ObjectMapper mapper = new ObjectMapper();
                JsonNode jsonNode = mapper.readValue(jsonFile, JsonNode.class);
                Label jsonLabel = new Label("jsonLabel",
                            mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonNode));
                jsonLabel.setOutputMarkupId(true);
                jsonLabel.setOutputMarkupPlaceholderTag(true);
                target.add(jsonLabel);
                addOrReplace(jsonLabel);
                } catch (JsonParseException e) {
                    e.printStackTrace();
                } catch (JsonMappingException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        };

        add(jsonData);
Html:

               <div>
                    <a wicket:id="jsonData" class="text-white">View Template</a>
                    <pre wicket:id="jsonLabel" class="text-white bg-dark"> </pre>
                </div>

您需要将标签添加为AjaxLink的同级:

final Label jsonLabel = new Label("jsonLabel", Model.of(""));
jsonLabel.setOutputMarkupId(true);
AjaxLink<Void> jsonData = new AjaxLink<Void>("jsonData") {

        @Override
        public void onClick(AjaxRequestTarget target) {
            File jsonFile;
            try {
                jsonFile = new File(fileLocation);

                ObjectMapper mapper = new ObjectMapper();        
                JsonNode jsonNode = mapper.readValue(jsonFile, JsonNode.class);
                // just update the Label's model and re-paint it
                jsonLabel.setModelObject(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonNode));
                target.add(jsonLabel);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };

    add(jsonData, jsonLabel);

您的HTML没有问题。

看起来您没有在页面的任何位置添加新创建的标签jsonLabel。在onclick函数中创建addOrReplacejsonLabel后,可以尝试添加addOrReplacejsonLabel。不过,如果创建一个带有动态模型的标签,每次通过ajax刷新数据时自动加载数据,整个问题就会得到更好的解决。您能告诉我如何使用动态模型创建标签吗。我试过addOrReplacejsonLabel,但不起作用。应用程序的预期行为是什么?运行代码时是否出现任何错误?预期的行为是在单击视图模板时显示JSON数据。我得到以下错误。org.apache.wicket.markup.MarkupException:在[JsonDataPanel[component id=dataPanel]]中找不到id为“jsonLabel”的组件,应为:“dataPanel:jsonLabel”。使用类似名称找到:在单击“查看模板”链接之前,由于标记的原因,该链接显示为空行。有没有办法隐藏那条空行。