java - Wicket 表单中的(不必要的)标记

标签 java wicket

在使用 Wicket(版本 7.5.0)生成简单的表单页面时,我得到了似乎不必要的额外标记(使用内联 CSS 将隐藏字段放入 <div> 中):

<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
  <head>
    <meta charset="utf-8" />
    <title>Apache Wicket Quickstart</title>
    <link href='http://fonts.googleapis.com/css?family=Yanone+Kaffeesatz:regular,bold' rel='stylesheet' type='text/css' />
    <link rel="stylesheet" href="mystyle.css" type="text/css" media="screen" title="Stylesheet"/>
  </head>
  <body>
    <form method="post" wicket:id="ItemForm" id="ItemForm1" action="./tf?1-1.IFormSubmitListener-ItemForm">
      <div style="width:0px;height:0px;position:absolute;left:-100px;top:-100px;overflow:hidden">
        <input type="hidden" name="ItemForm1_hf_0" id="ItemForm1_hf_0" />
      </div>
      <p>
        <label for="name">
          <span>Item name:</span>
        </label>
        <input type="text" name="p::name" wicket:id="name" value="">
      </p>
      <p>
        <label for="price">
          <span>Item price:</span>
        </label>
        <input type="text" name="price" wicket:id="price" value="0">
      </p>
      <section>
        <input type="submit" value="Submit">
      </section>
    </form>
  </body>
</html>

相关的Java类是:

// Package name and imports omitted    
public final class ItemFormPage extends WebPage {

      @EJB(name = "ejb/item")
      Item it;

      public ItemFormPage() {
        Form f = new Form("ItemForm") {
          @Override
          public void onSubmit() {
            setResponsePage(new ItemDisplay());
          }
        };

        f.setDefaultModel(new CompoundPropertyModel(it));
        f.add(new TextField("name"));
        f.add(new TextField("price"));
        add(f);
      }
    }

我是 Wicket 新手,从代码中可以明显看出。有没有办法避免生成上述看似不必要的标记?换句话说,我是否遗漏了什么或者我应该报告错误?

最佳答案

此隐藏的输入用于使用SubmitLink等基于 anchor 的组件提交表单。

例如,您有一个表单,并且希望有两种方式提交它(使用不同的 2 个按钮):

Form<Void> form = new Form<Void>("form") {
    @Override
    protected void onSubmit() {
        // central form onSubmit
    }
};

SubmitLink submitter1 = new SubmitLink("submitter1") {
    @Override
    public void onSubmit() {
        System.out.println("submitter 1 called");
    }
};
form.add(submitter1);

SubmitLink submitter2 = new SubmitLink("submitter2") {
    @Override
    public void onSubmit() {
        System.out.println("submitter 2 called");
    }
};
form.add(submitter2);

当您单击两个提交者中的任何一个时,其名称将被放入该输入中,Wicket 将找到正确的 SubmitLink 组件并调用其 onSubmit()

关于java - Wicket 表单中的(不必要的)标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42872419/

相关文章:

java - 如何在 Java 中将 "hash"长字符串转换为 String[64]

java - 如何读取Maven的POM.xml中资源文件夹中排除的文件

java - 如何在 Eclipse 插件中获取对当前项目的引用?

java - Wicket - 使用 AJAX 和 Wicket 模型更新 ListView

java - wicket 1.5 未找到错误消息

java - 独立运行每个 cucumber 测试

java - Spring无法处理 “multipart/form-data” POST请求(错误400 “Bad request”)

java - 对 Java/Wicket 服务器的 jQuery AJAX 调用在 IE 中没有响应 (6/7/8)

java - 如何通过 wicket ajax 行为捕获来自 &lt;input type ="date"> 的事件?

java - 使用延迟加载面板时,Wicket 无限重新加载页面