2013-08-22 14 views
7

Sto seguendo questo esempio di applicazione Ciao Mondo WicketJava/Wicket: Compilare base Ciao Mondo con le risorse

https://www.ibm.com/developerworks/web/library/wa-aj-wicket/

In particolare ho messo nel mio HelloWorld.html directory sorgente accanto al HelloWorld.java.

mia struttura dei file si presenta così:

$ tree 
. 
├── pom.xml 
├── src 
│   ├── main 
│   │   ├── java 
│   │   │   └── com 
│   │   │    └── example 
│   │   │     └── wicket 
│   │   │      ├── HelloWorld.html 
│   │   │      ├── HelloWorld.java 
│   │   │      └── HelloWorldApplication.java 
│   │   ├── resources 
│   │   └── webapp 
│   │    └── WEB-INF 
│   │     └── web.xml 
│   └── test 
│    └── java 
└── wicketTest.iml 

Tuttavia quando compilo questo in un file di guerra, e il carico in Jetty, ricevo questo errore, nel browser:

Unexpected RuntimeException 

Last cause: Can not determine Markup. Component is not yet connected to a parent. [Page class = com.example.wicket.HelloWorld, id = 4, render count = 1] 

Stacktrace 

Root cause: 

org.apache.wicket.markup.MarkupNotFoundException: Can not determine Markup. Component is not yet connected to a parent. [Page class = com.example.wicket.HelloWorld, id = 4, render count = 1] 
    at org.apache.wicket.Component.getMarkup(Component.java:737) 
    at org.apache.wicket.Component.internalRender(Component.java:2344) 
    at org.apache.wicket.Component.render(Component.java:2307) 
    at org.apache.wicket.Page.renderPage(Page.java:1010) 

Quando guardo nel file di guerra mi accorgo che il file html manca:

$ tar tvf target/wicketTest-1.0-SNAPSHOT.war 
drwxrwxrwx 0 0  0   0 Aug 22 14:50 META-INF/ 
-rwxrwxrwx 0 0  0   128 Aug 22 14:50 META-INF/MANIFEST.MF 
drwxrwxrwx 0 0  0   0 Aug 22 14:50 WEB-INF/ 
drwxrwxrwx 0 0  0   0 Aug 22 14:50 WEB-INF/classes/ 
drwxrwxrwx 0 0  0   0 Aug 22 14:50 WEB-INF/classes/com/ 
drwxrwxrwx 0 0  0   0 Aug 22 14:50 WEB-INF/classes/com/example/ 
drwxrwxrwx 0 0  0   0 Aug 22 14:50 WEB-INF/classes/com/example/wicket/ 
drwxrwxrwx 0 0  0   0 Aug 22 14:50 WEB-INF/lib/ 
-rwxrwxrwx 0 0  0   608 Aug 22 14:50 WEB-INF/classes/com/example/wicket/HelloWorld.class 
-rwxrwxrwx 0 0  0   551 Aug 22 14:50 WEB-INF/classes/com/example/wicket/HelloWorldApplication.class 
-rwxrwxrwx 0 0  0  25962 Aug 21 16:07 WEB-INF/lib/slf4j-api-1.6.4.jar 
-rwxrwxrwx 0 0  0  2126440 Aug 21 16:07 WEB-INF/lib/wicket-core-6.10.0.jar 
-rwxrwxrwx 0 0  0  86671 Aug 21 16:07 WEB-INF/lib/wicket-request-6.10.0.jar 
-rwxrwxrwx 0 0  0  415858 Aug 21 16:07 WEB-INF/lib/wicket-util-6.10.0.jar 
-rwxrwxrwx 0 0  0   690 Aug 22 13:22 WEB-INF/web.xml 
drwxrwxrwx 0 0  0   0 Aug 22 14:50 META-INF/maven/ 
drwxrwxrwx 0 0  0   0 Aug 22 14:50 META-INF/maven/wicketTest/ 
drwxrwxrwx 0 0  0   0 Aug 22 14:50 META-INF/maven/wicketTest/wicketTest/ 
-rwxrwxrwx 0 0  0   675 Aug 22 08:52 META-INF/maven/wicketTest/wicketTest/pom.xml 
-rwxrwxrwx 0 0  0   112 Aug 22 14:50 META-INF/maven/wicketTest/wicketTest/pom.properties 

Come faccio a specificare nel mio POM fil e per includere il file html?

mio POM in questo momento è minima:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>wicketTest</groupId> 
    <artifactId>wicketTest</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <dependencies> 
     <dependency> 
      <groupId>org.apache.wicket</groupId> 
      <artifactId>wicket-core</artifactId> 
      <version>6.10.0</version> 
     </dependency> 
    </dependencies> 
</project> 
+3

Perché non utilizzare solo il generatore di quickstart disponibile da http://wicket.apache.org/start/quickstart.html? A quel punto, si passa a una copia da un'applicazione funzionante. Almeno puoi cambiare il pom.xml dall'inizio rapido con il pom.xml che hai realizzato. –

+0

Grazie, mi ha preso la soluzione come hai detto. Pubblicato di seguito. –

risposta

17

La soluzione, se vuoi il tuo codice HTML nel posto migliore per le wicket (con le tue classi), è quello di aggiungere questo alla sezione di costruzione del tuo pom.

<build> 
    <resources> 
     <resource> 
      <filtering>false</filtering> 
      <directory>src/main/resources</directory> 
     </resource> 
     <resource> 
      <filtering>false</filtering> 
      <directory>src/main/java</directory> 
      <includes> 
       <include>**</include> 
      </includes> 
      <excludes> 
       <exclude>**/*.java</exclude> 
      </excludes> 
     </resource> 
    </resources> 
</build> 
</project> 
+0

buona spiegazione. Perché hai disattivato il filtro per 'src/main/resources'? – JimHawkins

1

Si dovrebbe mettere HelloWorld.html file nella cartella src/main/webapp. In questo modo sarà incluso nel file di guerra

+0

Per accettare, puoi essere più specifico sul percorso? –

+0

ha aggiornato la risposta – WeMakeSoftware

+0

Senza dubbio questo funzionerebbe, ma la risposta di David Williams è migliore poiché segue le migliori pratiche di Wicket. – iluwatar