java - 如何清理 HTML 中的 wicket 标签?

标签 java html web-applications wicket wicket-6

我是 Wicket 的新手。第一次使用 wicket datatable 后,我意识到 wicket:panel 和 wicket:container 被添加到 HTML 中。但是,我根本没有任何标记面板或容器。我需要一些帮助来确保 HTML 不包含不必要的 wicket 标记。谢谢!!!

HTML代码

<!DOCTYPE html>
<html lang="en"
      xml:lang="en"
      xmlns:wicket="http://wicket.apache.org>
   <head>
      <title> Wicket test </title>
   </head>
   <body>
      <table cellspacing="0" wicket:id="table"></table>
   </body>
</html>

Java代码

import java.util.ArrayList;
import java.util.List;

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.extensions.markup.html.repeater.data.table.DefaultDataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
import org.apache.wicket.model.Model;

public class TestPage extends WebPage {
    public TestPage() {
        final UserProvider userProvider = new UserProvider();
        List<IColumn<UserProvider.Contact, String>> columns = new ArrayList<IColumn<UserProvider.Contact, String>>(2);
        columns.add(new PropertyColumn<UserProvider.Contact, String>(new Model<String>("First Name"), "name.first", "name.first"));
        columns.add(new PropertyColumn<UserProvider.Contact, String>(new Model<String>("Last Name"), "name.last", "name.last"));
        DefaultDataTable<UserProvider.Contact, String> dataTable = new DefaultDataTable<UserProvider.Contact, String>("table", columns, userProvider, 10);
        add(dataTable);
    }
}

UserProvider 的 Java 代码

import java.util.*;
import java.io.Serializable;

import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;

public Class UserProvider extends SortableDataProvider {
    class SortableDataProviderComparator implements Comparator<Contact>, Serializable {
        public int compare(final Contact o1, final Contact o2) {
            PropertyModel<Comparable> model1 = new PropertyModel<Comparable>(o1, (String) getSort().getProperty());
            PropertyModel<Comparable> model2 = new PropertyModel<Comparable>(o2, (String) getSort().getProperty());
            int result = model1.getObject().compareTo(model2.getObject());
            if (!getSort().isAscending()) {
                result = -result;
            }
            return result;
        }
    }

    private List<Contact> list = new ArrayList<Contact>();
    private SortableDataProviderComparator comparator = new SortableDataProviderComparator();

    public UserProvder() {
        setSort("name.first", SortOrder.ASCENDING);
        list.add(new Contact(new Name("Abbie", "Zed")));
        list.add(new Contact(new Name("Benny", "Yellen")));
        list.add(new Contact(new Name("Charles", "Wukong")));
        list.add(new Contact(new Name("Dennis", "Rose")));
        list.add(new Contact(new Name("Elaine", "Poppy")));
        list.add(new Contact(new Name("Peter", "Jax")));
    }

    public Iterator<Contact> model(long first, long count) {
        List<Contact> newList = new ArrayList<Contact>(list);
        Collections.sort(newList, comparator);
        return newList.subList((int) first, (int) (first + count)).iterator();
    }

    public IModel<Contact> model(final Object object) {
        return new AbstractReadOnlyModel<Contact>() {
            @Override
            public Contact getObject() {
                return (Contact) object;
            }
        };
    }

    public long size() {
        return list.size();
    }

    class Contact implements Serializable {
        private final Name name;
        public Contact(final Name name) {
            this.name = name;
        }
        public Name getName() {
            return name;
        }
    }

    class Name implements Serializable {
        private String firstName;
        private String lastName;
        public Name(final String fName, final String lName) {
            firstName = fName;
            lastName = lName;
        }
        public String getFirst() {
            return firstName;
        }
        public String getLast() {
            return lastName;
        }
        public setFirst(final String firstName) {
            this.firstName = firstName;
        }
        public setLast(final String lastName) {
            this.lastName = lastName;
        }
    }
}

以上Java代码来自一些在线示例。从代码来看,wicket:panel 和 wicket:container 没有被使用;然而,一旦你部署了这个 webapp。客户端收到带有 unsed wicket 标签的 HTML 页面。

最佳答案

在您的应用程序类的 init() 方法中,调用

getMarkupSettings().setStripWicketTags(false);

您还可以使用 setStripComments() 从生成的 HTML 中删除注释,并使用 setCompressWhitespace()

压缩空白

引用:http://ci.apache.org/projects/wicket/apidocs/6.0.x/org/apache/wicket/settings/IMarkupSettings.html

关于java - 如何清理 HTML 中的 wicket 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22848177/

相关文章:

swing - JComboBox 项目更改

asp.net - 动态创建 ASP.NET 表单元素

php - 如何在使用 PHP Slim REST Api 时提供我的 index.html 文件?

java - 在 SAX 解析器中解析大型 XML 文件时没有内存的异常

java - Spring 无法创建 sessonFactory bean

java - 如何轻松替换导入的类?

java - 浏览器重启java后保持 session

javascript - 使用设备上的 android 后退按钮返回到 Framework7 应用程序中的主视图?

javascript - WebRTC RTCPeerConnection 未建立

html - Gulp、Pug - 如何将 src/directory 的子目录中的所有 .pug 文件编译到/dist,以便它们保持目录层次结构?