2012-04-17 10 views
0

Im卡住了,無法找到我在這裏做錯了什麼。我已經閱讀了幾篇關於它的教程,並嘗試了他們應該如何完成的「他們的」版本。 Netbeans不會給出任何錯誤,但我的瀏覽器不會。 她是我的代碼。任何提示歡迎卡住om DefaultDataTable組件 - 找不到錯誤

RegistrerteBrukere.java

package com.myapp.wicket; 

import java.util.ArrayList; 
import java.util.List; 
import org.apache.wicket.PageParameters; 
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; 

/** 
* 
* @author Bjørn J Aurheim 
*/ 
public final class RegistrerteBrukere extends BasePage { 

    private DefaultDataTable<Bruker> table; 
    private int antallRekkerPrSide = 50; 

    private BrukerProvider provider = new BrukerProvider(); 


    public RegistrerteBrukere() { 
     super(); 

     // opprette testdata i liste for datatabellen 


     // List<IColumn<Bruker>> kolonner = new ArrayList<IColumn<Bruker>>(); 
     List kolonner = new ArrayList(); 
     kolonner.add(new PropertyColumn<Bruker>(new Model("Fornavn"),"bruker","bruker")); 
     kolonner.add(new PropertyColumn<Bruker>(new Model("Etternavn"),"etternavn","bruker")); 
     kolonner.add(new PropertyColumn<Bruker>(new Model("Telefonnummer"),"telefonnummer","telefonnummer")); 
     kolonner.add(new PropertyColumn<Bruker>(new Model("Mailadresse"),"mailadresse","mailadresse")); 
     kolonner.add(new PropertyColumn<Bruker>(new Model("StartDato"),"startdato","startdato")); 
     kolonner.add(new PropertyColumn<Bruker>(new Model("Passord"),"passord","passord")); 
     table = new DefaultDataTable<Bruker>("brukertable", kolonner, provider, antallRekkerPrSide); 
     add(table); 

     } 


    public RegistrerteBrukere(PageParameters params) { 


     //TODO: process page parameters 

    } 
} 

RegistrerteBrukere.html

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns:wicket="http://wicket.apache.org"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
     <title>RegistrerteBrukere</title> 
     <link rel="stylesheet" type="text/css" href="style.css"/> 
    </head> 
    <body> 
     <wicket:extend> 
      <table wicket:id="brukertable" class="brukere"></table> 
     </wicket:extend> 

    </body> 
</html> 

BrukerProvider.java

public class BrukerProvider extends SortableDataProvider<Bruker>{ 
Bruker u = new Bruker(); 
Bruker u1 = new Bruker(); 
private static List<Bruker> brukere = Arrays.asList(); 

     public BrukerProvider(){ 
      setSort("fornavn",true); 
      u.setForNavn("Tore"); 
      u.setEtterNavn("Hansen"); 
      u.setTelefonnummer("99887766"); 
      u.setMailadresse("[email protected]"); 
      u.setStartDato(new Date()); 
      u.setPassord("passord"); 
      brukere.add(u); 
      u1.setForNavn("Hanne"); 
      u1.setEtterNavn("Ås"); 
      u1.setTelefonnummer("99324766"); 
      u1.setMailadresse("[email protected]"); 
      u1.setStartDato(new Date()); 
      u1.setPassord("passsdford"); 
      brukere.add(u1); 
     } 
@Override 
     public Iterator<? extends Bruker> iterator(int first, int count){ 
      List<Bruker> data = new ArrayList<Bruker>(brukere); 
      Collections.sort (data, new Comparator<Bruker>(){ 
     @Override 
      public int compare(Bruker o1, Bruker o2) { 
       int dir = getSort().isAscending() ? 1: -1; 
       if ("fornavn".equals(getSort().getProperty())){ 
        return dir * (o1.getForNavn().compareTo(o2.getForNavn())); 
       } else { 
        return dir * (o1.getEtterNavn().compareTo(o2.getEtterNavn())); 
       } 

      } 

     }); 
     return data.subList(first, Math.min(first + count, data.size())).iterator(); 
} 
@Override 
     public int size(){ 
      return brukere.size(); 
     } 
@Override 
     public IModel<Bruker> model(Bruker object){ 
      return Model.of(object); 
     } 
} 

我的錯誤信息:

WicketMessage: Can't instantiate page using constructor public com.myapp.wicket.RegistrerteBrukere() 

Root cause: 

java.lang.UnsupportedOperationException 
    at java.util.AbstractList.add(AbstractList.java:148) 
    at java.util.AbstractList.add(AbstractList.java:108) 
    at com.myapp.wicket.BrukerProvider.<init>(BrukerProvider.java:29) 
    at com.myapp.wicket.RegistrerteBrukere.<init>(RegistrerteBrukere.java:24) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at org.apache.wicket.session.DefaultPageFactory.createPage(DefaultPageFactory.java:192) 
    at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:57) 
    at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.newPage(BookmarkablePageRequestTarget.java:298) 
    at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.getPage(BookmarkablePageRequestTarget.java:320) 
    at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.processEvents(BookmarkablePageRequestTarget.java:234) 
    at org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:92) 
    at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1279) 
    at org.apache.wicket.RequestCycle.step(RequestCycle.java:1358) 
    at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1465) 
    at org.apache.wicket.RequestCycle.request(RequestCycle.java:545) 
    at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:486) 
    at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:319) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:304) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:722) 

Complete stack: 

org.apache.wicket.WicketRuntimeException: Can't instantiate page using constructor public com.myapp.wicket.RegistrerteBrukere() 
    at org.apache.wicket.session.DefaultPageFactory.createPage(DefaultPageFactory.java:212) 
    at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:57) 
    at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.newPage(BookmarkablePageRequestTarget.java:298) 
    at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.getPage(BookmarkablePageRequestTarget.java:320) 
    at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.processEvents(BookmarkablePageRequestTarget.java:234) 
    at org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:92) 
    at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1279) 
    at org.apache.wicket.RequestCycle.step(RequestCycle.java:1358) 
    at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1465) 
    at org.apache.wicket.RequestCycle.request(RequestCycle.java:545) 
    at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:486) 

java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at org.apache.wicket.session.DefaultPageFactory.createPage(DefaultPageFactory.java:192) 
    at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:57) 
    at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.newPage(BookmarkablePageRequestTarget.java:298) 
    at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.getPage(BookmarkablePageRequestTarget.java:320) 
    at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.processEvents(BookmarkablePageRequestTarget.java:234) 
    at org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:92) 
    at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1279) 
    at org.apache.wicket.RequestCycle.step(RequestCycle.java:1358) 
    at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1465) 
    at org.apache.wicket.RequestCycle.request(RequestCycle.java:545) 
    at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:486) 



display page view 

希望這是足夠的信息..

回答

6

問題是與你的列表的聲明在這裏:

private static List<Bruker> brukere = Arrays.asList(); 

相反,你可能會猜測,Arrays.asList()不返回ArrayList。相反,它返回(引用Javadoc)「由指定數組支持的固定大小列表」。這裏的關鍵詞是「固定大小」,這意味着你不能增加或減少數組的大小。換句話說,Arrays.asList()返回的列表應該被視爲數組的類似集合的視圖,而不是由數組支持的新列表。

您可以通過簡單地改變上述行來解決這個問題:

private static List<Bruker> brukere = new ArrayList<Bruker>(); 

將使用一個ArrayList,這是一個正確全面實施List。順便提一下,你可以看一下this blog post,它詳細介紹Arrays.asList()返回的類的實際實現。

還值得注意的是,投擲UnsupportedOperationExceptiondocumented behavior for List.add()。這似乎違反了界面的預期性質,但Java實際上提供了許多方法(add(),addAll(),remove(),clear()等,基本上,打算改變底層存儲列表的方法)可選地不通過簡單地拋出UnsupportedOperationException來實現。

+0

謝謝,你是正確的。昨天當我搜索錯誤信息時,我確實在互聯網上找到了這個解釋。我只是無法連接點... :-) – 2012-04-18 07:25:47

0

將Arrays.asList更改爲ArrayList後,我仍然有錯誤。它是由與更換

​​

更正:

`List kolonner = new ArrayList(); 
    kolonner.add(new PropertyColumn<Bruker>(new Model("Fornavn"),"fornavn","fornavn")); 
    kolonner.add(new PropertyColumn<Bruker>(new Model("Etternavn"),"etternavn","etternavn")); 
    kolonner.add(new PropertyColumn<Bruker>(new Model("Telefonnummer"),"telefonnummer","telefonnummer")); 
    kolonner.add(new PropertyColumn<Bruker>(new Model("Mailadresse"),"mailadresse","mailadresse")); 
    kolonner.add(new PropertyColumn<Bruker>(new Model("StartDato"),"startdato","startDato")); 
    kolonner.add(new PropertyColumn<Bruker>(new Model("Passord"),"passord","passord")); 
    table = new DefaultDataTable<Bruker>("brukertable", kolonner, provider, antallRekkerPrSide);` 

在RegistrerteBrukere.java文件