0

私は改札に取り組んでいます。ナビゲーションバーをクリックした後、ビューをレンダリングすることになっています。何も起こりません。助けてください。

<div class="colums data" wicket:id="BooksListViewContainer">

    <div wicket:id="booksListView">
        <div class="col-left data" wicket:id="bookName"></div>
        <div class="col-middle data" wicket:id="author"></div>
        <div class="col-middle data" wicket:id="genre"></div>
        <div class="col-middle data" wicket:id="language"></div>
        <div class="col-middle data" wicket:id="datePublished"></div>
    </div>
    <div wicket:id="navigator" class="navi">xxx</div>
</div>

およびjava:

 public class HomePage extends WebPage {

    transient LibaryServices libaryService ;
    Component sortBtns [] ;

public HomePage(final PageParameters parameters) {
    super(parameters);
    initPage();
}

private void initPage() {
    libaryService = new LibaryServices();
    add(getBooksListViewContainer());
}

private WebMarkupContainer getBooksListViewContainer(){
    String id = "BooksListViewContainer" ;
    WebMarkupContainer c = (WebMarkupContainer) get(id);
    if (c != null)
        return c;

    final WebMarkupContainer container = new WebMarkupContainer(id);
    container.add(getBooksListView());
    container.add(getNavigator());
    container.setOutputMarkupId(true);
    return container;
}

@SuppressWarnings("unchecked")
private PageableListView<Book> getBooksListView() {
    String id = "booksListView";
    PageableListView<Book> c = (PageableListView<Book>)get(id);
    if (c != null)
        return c;
    final PageableListView<Book> booksListView = new PageableListView<Book>(id, libaryService.getBooks(), 4) {
        @Override
        protected void populateItem(ListItem<Book> listBookItem) {
            Book book = (Book) listBookItem.getModelObject();

            listBookItem.add(new Label("author", book.getAuthor()));
            listBookItem.add(new Label("bookName", book.getBookName()));
            listBookItem.add(new Label("language", book.getBookLanguage()));
            listBookItem.add(new Label("genre", book.getGenre()));
            listBookItem.add(new Label("datePublished", book.getDatePublished()));

            listBookItem.setVisible(listBookItem.isVisible()&&
                        book.isShouldBeDisplayedAfterPassFilter());     
        }
        @Override
        protected IModel<Book> getListItemModel(
                IModel<? extends List<Book>> listViewModel, int index) {
            return super.getListItemModel(listViewModel, index);
        }
    };
    booksListView.setOutputMarkupId(true);
    booksListView.setMarkupId(id);
    return booksListView;
}
    public SortingDataUtil getSortingDataUtil(){
    return SortingDataUtil.getInstace();
}

private AjaxPagingNavigator getNavigator() {
String id = "navigator";
AjaxPagingNavigator navigator = (AjaxPagingNavigator) get(id);
if (navigator == null) {
    navigator = new AjaxPagingNavigator(id, getBooksListView()) {
    @Override
    protected void onAjaxEvent(AjaxRequestTarget target) {
        super.onAjaxEvent(target);
    }
    };
    navigator.setOutputMarkupId(true);
}
return navigator;
}       

}

これは私が得ている例外です

予期しないRuntimeException

  Last cause: Argument 'component' may not be null.
 WicketMessage: Method onRequest of interface      org.apache.wicket.behavior.IBehaviorListener targeted at      org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigationLink$1@321af6fe on component [AjaxPagingNavigationLink [Component id = pageLink]] threw an exception

スタックトレース

根本的な原因:

 java.lang.IllegalArgumentException: Argument 'component' may not be null.
 at org.apache.wicket.util.lang.Args.notNull(Args.java:41)
 at org.apache.wicket.ajax.AjaxRequestHandler.add(AjaxRequestHandler.java:226)
 at org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator.onAjaxEvent(AjaxPagingNavigator.java:152)
 at com.wicketlibary.HomePage$3.onAjaxEvent(HomePage.java:146)
 at org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigationBehavior.onEvent(AjaxPagingNavigationBehavior.java:82)
 at org.apache.wicket.ajax.AjaxEventBehavior.respond(AjaxEventBehavior.java:131)
 at org.apache.wicket.ajax.AbstractDefaultAjaxBehavior.onRequest(AbstractDefaultAjaxBehavior.java:603)

編集:私のバージョンは

  <wicket.version>6.6.0</wicket.version>
4

1 に答える 1

0

バグだと思われる場合は、クイックスタートを作成して送信する必要があります。

その前に、PageableListView への参照を取得する方法を変更し、代わりにクラス変数を作成して設定し、AjaxPagingNavigator の作成時に使用します。AjaxPagingNavigator から呼び出されたときに「c」が null でないことを確認するためにデバッグを使用しましたか。あなたと同じウィケットバージョンを使用して、私の環境でこれを機能させています。私のコードの唯一の違いは、get(id) を呼び出して変数を取得しないことです。

于 2013-03-10T18:28:13.077 に答える