我從檢票1.4.11讀數異常:檢票替換 「僅添加到父組件」
2010-11-03 17:44:51971 [HTTP-8080-1] ERROR的有機apache.wicket.RequestCycle - 針對組件[MarkupContainer [Component id = customer]]的org.apache.wicket.markup.html.form.IFormSubmitListener接口的方法onFormSubmitted拋出異常
org.apache.wicket.WicketRuntimeException:Method onFormSubmitted界面
針對組件[MarkupContainer [Component id = customer]]的org.apache.wicket.markup.html.form.IFormSubmitListener在org.a處拋出異常 在sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法)
...
java.lang.reflect.InvocationTargetException :pache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:193)
...
引起 引起:java.lang.IllegalStateException:只能在已經添加到其父項的組件上調用此方法。
在org.apache.wicket.Component.replaceWith(Component.java:2804)
在no.magge.iumb.web.crm.customers.PrivateCustomerTab $ 1.onSubmit(PrivateCustomerTab.java:34)
的組織。 apache.wicket.markup.html.form.Form.delegateSubmit(Form.java:1565)
這發生了,當我在一個tabbedpanel一個tabbedpanel面板單擊窗體的cancel_btn
...這裏是cancel_btn
的代碼:
public class PrivateCustomerTab extends Panel {
private static final long serialVersionUID = 16L;
protected Panel getCurrentPanel() {
return this;
}
public PrivateCustomerTab(String id, long customerId, final Panel backPanel) {
super(id);
final PrivateCustomerForm form = new PrivateCustomerForm("customer", customerId) {
private static final long serialVersionUID = 4L;
@Override
protected void onSubmit() {
System.out.println("\n\n(formsubmit) HELLO THERE MY PARENT IS: " + getParent() + "\n\n");
if (customerId!=0) {
PrivateCustomerTab.this.replaceWith(new PrivateCustomerTab("panel", customerId, backPanel));
}
}
};
add(form);
Button cancelButton = new Button("cancel_btn", new ResourceModel("cancel")) {
private static final long serialVersionUID = 18L;
@Override
public void onSubmit() {
System.out.println("\n\n(cancelsubmit) HELLO THERE MY PARENT IS: " + getParent() + "\n\n");
if (backPanel!=null) {
// PrivateCustomerTab.this.replace(backPanel);
getCurrentPanel().replaceWith(new CustomerListTab("panel"));
}
}
};
cancelButton.setVisible(backPanel!=null);
form.add(cancelButton);
}
}
我是蜜蜂ñ嘗試各種方式獲取當前面板,我想替換的面板。一種方法是使用從面板類返回this
的getCurrentPanel()
方法。另一種方法是做PrivateCustomerTab.this.replaceWith(...)
,我也試過getParent().getParent().replaceWith(...)
。這些都給我的信息,我不能代替沒有添加到其父母的東西。
我想我一定是誤解了這裏的一些關鍵概念。也許窗體在我的面板被添加到其父項之前被處理,這意味着我不能替換面板cancel_btn
的onSubmit()
?
我試過Google搜索我的方式,並在我的副本Wicket in Action中尋找相關信息。請幫我理解......謝謝!
不,層次不應該改變據我所知。我有一個代替replaceWith()的鏈接,並取代了這個PrivateCustomerTab面板。我不改變標記或做任何事情來操縱它和cancel_btn的onSubmit方法之間的層次結構。 – Magnus 2010-11-04 15:56:23
我看到你關於問題的觀點是我的面板現在不知何故沒有父母。所以謝謝你... – Magnus 2010-11-04 15:57:43
標記爲有用。發現問題並在下面發佈答案。再次感謝你的幫助。 – Magnus 2010-11-04 18:25:40