2016-08-24 2 views
0

Я новичок в калитки, попытаюсь понять некоторые примеры. Один из примеров, которые я пробовал, - это navomatic. Чистый пример работает на моей локальной установке, следующим шагом я хотел бы расширить его до примера приложения. Поэтому я ставлю на «страницу» простую форму.Wicket wicket: идентификатор наследования - как?

Но что я теперь получить это исключение, как:

Last cause: Unable to find component with id 'form' in [BorderBodyContainer [Component id = navomaticBorder_body]] 
Expected: 'navomaticBorder:bodyBorder:navomaticBorder_body:form'. 
Found with similar names: 'form' 

Вот мой код: NavomaticBorder.java

public class NavomaticBorder extends Border { 

    public NavomaticBorder(final String id) { 
     super(id); 
     addToBorder(new MyBorder("navigationBorder")); 
     addToBorder(new MyBorder("bodyBorder")); 
    } 
} 

NavomaticBorder.html:

<html xmlns:wicket="http://wicket.apache.org"> 
<head> 
<link rel="stylesheet" type="text/css" href="layout.css" /> 
</head> 
<body> 
    <wicket:border> 
    <div id="main"> 
     <div id="left_nav"> 
     <span wicket:id="navigationBorder"> 
      <wicket:link> 
       <a href="MyDataPage.html">My Data</a> 
      </wicket:link> 
     </span> 
     </div> 
     <div id="content_area"> 
     <span wicket:id="bodyBorder"> 
      <wicket:body /> 
     </span> 
     </div> 
    </div> 
    </wicket:border> 
</body> 
</html> 

MyDataPage. java:

public class MyDataPage extends WebPage { 

    public MyDataPage() { 
     add(new NavomaticBorder("navomaticBorder")); 

     // This model references the page's message property and is 
     // shared by the label and form component 
     final PropertyModel<String> messageModel = new PropertyModel<>(this, "message"); 

     // The label displays the currently set message 
     add(new Label("msg", messageModel)); 

     // Add a form to change the message. We don't need to do anything 
     // else with this form as the shared model is automatically updated 
     // on form submits 
     final Form<?> form = new Form("form"); 
     form.add(new TextField("msgInput", messageModel)); 
     add(form); 
    } 
} 

и, наконец, MyDataPage.html:

<html xmlns:wicket="http://wicket.apache.org"> 
<head> 
<link rel="stylesheet" type="text/css" href="layout.css" /> 
</head> 
<body> 
<!-- <div wicket:id = "mainNavigation"></div> --> 
<div wicket:id = "navomaticBorder"> 
    <div> 
     <h3>My Data</h3> 
    </div> 
    <div> 
     <form wicket:id="form"> 
      <input type="text" wicket:id="msgInput" value="" size="50" /> 
      <input type="submit" value="set message" /> 
     </form> 
     <span wicket:id="msg" id="msg">Message goes here</span> 
    </div> 
</div> 

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

благодарит

ответ

4

Вы разместили форму внутри novomaticBorder, но не добавлять его в компонент иерархии.

Калитка Код:

  • navomaticBorder
  • тзд
  • форма

Markup:

  • navomaticBorder
    • форма
    • тзд

Вы должны добавить форму к вашей границе.

NavomaticBorder navomaticBorder = new NavomaticBorder("navomaticBorder") 
    add(navomaticBorder); 

    //... 

    navomaticBorder.add(form); 

Alternativly вы можете поставить в очередь компоненты вместо добавить: https://ci.apache.org/projects/wicket/guide/7.x/guide/componentQueueing.html массового обслуживания будет autoresolve иерархии в разметке

queue(new NavomaticBorder("navomaticBorder")); 
    //... 
    queue(form); 
+0

Привет, yeahhh, что была проблема. Это так просто и понятно, что я должен просто добавить компонент к компоненту Border. Огромное спасибо! – piet

Смежные вопросы