Как изменить разметку, созданную ссылкой Wicket в PagingNavigator? - PullRequest
2 голосов
/ 14 февраля 2011

Я использую настроенный компонент PagingNavigator и ищу способ изменить разметку, созданную для первого, предыдущего и текущего элементов подкачки страницы.

Вот мой PaginingNavigator:

 <wicket:panel>
<ul class="pagination">
    <li class="first">
        <a wicket:id="first">&lt;&lt;</a>
    </li>
    <li class="prev">
        <a wicket:id="prev">&#060;</a>
    </li>
    <li wicket:id="navigation" class="page">
        <a wicket:id="pageLink" href="#">
            <span wicket:id="pageNumber">5</span>
        </a>
    </li>
    <li class="dots">...</li>
    <li wicket:id="lastPage" class="jump"></li>
    <li class="next">
        <a wicket:id="next">&#062;</a>
    </li>
    <li class="last">
        <a wicket:id="last">&gt;&gt;</a>    
    </li>
</ul>

Разметка, генерируемая в LI неактивных элементов (изначально, на предыдущей, первой и текущей странице), выглядит следующим образом:

<span title="Item Title" id="RandomID">
    <em>
      <span>ItemText</span>
    </em>
</span>

Это делает довольно сложным оформление содержимого неактивных элементов подкачки и текущей страницы по-разному. Я бы предпочел, чтобы он выводил что-то подобное для неактивных предметов:

<a href="#" title=ItemTitle" id="RandomID" class="inactive">ItemText</a>

и это для текущей страницы:

 <a href="#" title=ItemTitle" id="RandomID" class="currentPage">ItemText</a>

Я также заметил, что он вставляет теги SPAN в теги A, когда вы начинаете листать результаты, и, поскольку у них нет определенных классов, правильное оформление становится довольно утомительным.

Я копался в нашей кодовой базе и нигде не могу найти, что бы мы указали это, но, поскольку я работаю на переднем крае, мне было бы довольно легко не заметить. Насколько я могу судить, они кажутся стандартными PagingNavigationLinks.

Есть идеи?

Ответы [ 3 ]

3 голосов
/ 15 февраля 2011

Если вы посмотрите здесь:

Apache Wicket - поисковая оптимизация

в разделе «Пейджинг без состояния» вы можете получить представление о том, как переопределить различные части пейджинговой навигации.

2 голосов
/ 01 сентября 2011

Вы можете расширить ядро ​​PagingNavigator:

import org.apache.wicket.markup.html.navigation.paging.IPageable;
import org.apache.wicket.markup.html.navigation.paging.IPagingLabelProvider;
import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;

class MyPagingNavigator extends PagingNavigator {

    public MyPagingNavigator(String id, IPageable pageable) {
        super(id, pageable);
    }

    public MyPagingNavigator(String id, IPageable pageable, IPagingLabelProvider labelProvider) {
        super(id, pageable, labelProvider);
    }



}

Затем вы создаете MyPagingNavigator.html, где вы можете внести свои изменения. Но убедитесь, что вы не удаляете какие-либо компоненты из MyPagingNavigator.html

Вы можете использовать оригинальный контент из источника калитки (src / wicket / src / main / java / org / apache / wicket / markup / html / navigation / paging / PagingNavigator.html):

<?xml version="1.0" encoding="UTF-8" ?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<html xmlns:wicket>
<body>
  <wicket:panel>
    <a wicket:id="first">&lt;&lt;</a>&nbsp;<a wicket:id="prev">&lt;</a>
    <span wicket:id="navigation">
          <a wicket:id="pageLink" href="#"><span wicket:id="pageNumber">5</span></a>
    </span>
    <a wicket:id="next">&gt;</a>&nbsp;<a wicket:id="last">&gt;&gt;</a>
  </wicket:panel>
</body>
</html>
0 голосов
/ 25 июня 2013

Чтобы решить эту проблему, мне пришлось расширить несколько классов.В частности, мне нужно было переопределить поведение org.apache.wicket.markup.html.link.AbstractLink.disableLink (окончательный тег ComponentTag)

Именно в функции disableLink класса AbstractLink тег «a» являетсяизменено на "span" и атрибуты href и onclick удалены.Сначала я вернулся к PagingNavigator и расширил это следующим образом:

public class DreamPagingNavigator extends PagingNavigator {

    public DreamPagingNavigator(String id, IPageable pageable) {
        super(id, pageable);
    }

    public DreamPagingNavigator(String id, IPageable pageable, IPagingLabelProvider labelProvider) {
        super(id, pageable, labelProvider);
    }

    @Override
    protected PagingNavigation newNavigation(final String id, final IPageable pageable,
            final IPagingLabelProvider labelProvider) {
        return new DreamPagingNavigation(id, pageable, labelProvider);
    }

    @Override
    protected AbstractLink newPagingNavigationIncrementLink(String id, IPageable pageable,
            int increment) {
        return new DreamPagingNavigationIncrementLink<Void>(id, pageable, increment);
    }

    @Override
    protected AbstractLink newPagingNavigationLink(String id, IPageable pageable, int pageNumber) {
        return new DreamPagingNavigationLink<Void>(id, pageable, pageNumber);
    }

}

Для моей темы «Dream» это позволило мне переопределить newPagingNavigationLink, newPagingNavigationIncrementLink и т. Д. Моя реализация для PagingNavigationLink (и др.) Затем измениласьповедение отключения, например:

public class DreamPagingNavigationLink<T> extends PagingNavigationLink<T> {

    public DreamPagingNavigationLink(String id, IPageable pageable, long pageNumber) {
        super(id, pageable, pageNumber);
    }

    @Override
    protected void disableLink(final ComponentTag tag)
    {
        // if the tag is an anchor proper
        if (tag.getName().equalsIgnoreCase("a") || tag.getName().equalsIgnoreCase("link") ||
            tag.getName().equalsIgnoreCase("area"))
        {
            // Remove any href from the old link
            tag.remove("href");
            tag.remove("onclick");

        }
        // if the tag is a button or input
        else if ("button".equalsIgnoreCase(tag.getName()) ||
            "input".equalsIgnoreCase(tag.getName()))
        {
            tag.put("disabled", "disabled");
        }
    }

}

Вместо того, чтобы менять тег «a» на «span», я просто удаляю атрибуты href и onclick.

Теперь я получаютег привязки отображается без ссылки.

...