Hi Fatih,
The problem is that you have not set a model on your drop down choice so
there is a null model which causes the exception you see to be generated.
Caused by: java.lang.IllegalStateException: Attempt to set model object on
null model of component:
productProposalForm:productsPropertyListView:0:dropDown:dropDown
Setting a default model on the dropdown choice should fix your problems.
i.e. add a 'new Model()' as the second argument to the DropDownChoice
constructor
public class NestedDropDownPanel extends Panel {
public NestedDropDownPanel(String id,int productPropertyId) {
super(id);
ProductPropertyOptionDAO productPropertyOptionDAO = new
ProductPropertyOptionDAO(productPropertyId);
DropDownChoice dropDownChoice=new DropDownChoice("dropDown",
new Model (), new
Model((Serializable)productPropertyOptionDAO.getResultList()),new
ChoiceRenderer("name"));
dropDownChoice.setRequired(true);
add(dropDownChoice);
}
Mike
Hi,
I am using a ListView to render the dynamic number of select boxes and
their options.
Hi Fatih,
The problem is that you have not set a model on your drop down choice
so there is a null model which causes the exception you see to be
generated.
Setting a default model on the dropdown choice should fix your
problems. i.e. add a 'new Model()' as the second argument to the ddc.
public class NestedDropDownPanel extends Panel {
public NestedDropDownPanel(String id,int productPropertyId) {
super(id);
ProductPropertyOptionDAO productPropertyOptionDAO = new
ProductPropertyOptionDAO(productPropertyId);
DropDownChoice dropDownChoice=new DropDownChoice("dropDown", new
Model (), new
Model((Serializable)productPropertyOptionDAO.getResultList()),new
ChoiceRenderer("name"));
dropDownChoice.setRequired(true);
add(dropDownChoice);
}
Mike
I have added all select boxes into a ListView object and listView into a
form and trying to calculate a final price using all selected values from
select boxes.
However, when I submit the form I got an exception before the execution of
onSubmit() method.
I am doing sth wrong but I could not find. Would u please give me some idea
about how to overcome this problem.
Thx.
Fatih
I have a database design similar to below one.
Product names are coming from db
and all products have diffrent kind of Properties
And each property have options
all also coming from db (choices in the select boxes).
Product
------------
Id
Name
Eg.
Audi A3
Audi A4
Audi A6
ProductProperty
----------
Id
Name
Eg.
Engine Type.
.
.
ProductPropertyOption
-------
Id
Name
Eg.
1.6lt
2.0lt
1.9lt Diesel
.
.
StackTrace:
org.apache.wicket.WicketRuntimeException: Method onFormSubmitted of
interface org.apache.wicket.markup.html.form.IFormSubmitListener targeted at
component [MarkupContainer [Component id = productProposalForm, page =
com.cooldatasoft.page.proposal.ProductMenu, path =
1:productProposalForm.ProductMenu$ProductProposalForm, isVisible = true,
isVersioned = true]] threw an exception
at
org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.j
ava:194)
at
org.apache.wicket.request.target.component.listener.ListenerInterfaceRequest
Target.processEvents(ListenerInterfaceRequestTarget.java:73)
at
org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(Abstra
ctRequestCycleProcessor.java:90)
at
org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:116
6)
at org.apache.wicket.RequestCycle.step(RequestCycle.java:1241)
at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1316)
at org.apache.wicket.RequestCycle.request(RequestCycle.java:493)
at
org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:354)
at
org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:194)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:233)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:175)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128
)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102
)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http
11Protocol.java:584)
at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at
org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.j
ava:183)
... 20 more
Caused by: java.lang.IllegalStateException: Attempt to set model object on
null model of component:
productProposalForm:productsPropertyListView:0:dropDown:dropDown
at org.apache.wicket.Component.setModelObject(Component.java:2850)
at
org.apache.wicket.markup.html.form.FormComponent.updateModel(FormComponent.j
ava:1016)
at org.apache.wicket.markup.html.form.Form$19.validate(Form.java:1750)
at
org.apache.wicket.markup.html.form.Form$ValidationVisitor.formComponent(Form
.java:160)
at
org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrde
rHelper(FormComponent.java:402)
at
org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrde
rHelper(FormComponent.java:389)
at
org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrde
rHelper(FormComponent.java:389)
at
org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrde
rHelper(FormComponent.java:389)
at
org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrde
rHelper(FormComponent.java:389)
at
org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrde
r(FormComponent.java:366)
at
org.apache.wicket.markup.html.form.Form.visitFormComponentsPostOrder(Form.ja
va:1026)
at
org.apache.wicket.markup.html.form.Form.internalUpdateFormComponentModels(Fo
rm.java:1742)
at
org.apache.wicket.markup.html.form.Form.updateFormComponentModels(Form.java:
1709)
at org.apache.wicket.markup.html.form.Form.process(Form.java:831)
at
org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:773)
... 25 more
final ListView productsList = new ListView("productsPropertyListView",new
Model( (Serializable)(new ProductPropertyDAO(productId)).getResultList()) )
{
public void populateItem(final ListItem item) {
final TbProductProperty productProperty =
(TbProductProperty) item.getModelObject();
item.add(new
Label("productPropertyName",productProperty.getName()));
item.add(new NestedDropDownPanel("dropDown",
productProperty.getId()));
}
};
productsList.setReuseItems(true);
add(productsList);
public class NestedDropDownPanel extends Panel {
public NestedDropDownPanel(String id,int productPropertyId) {
super(id);
ProductPropertyOptionDAO productPropertyOptionDAO = new
ProductPropertyOptionDAO(productPropertyId);
DropDownChoice dropDownChoice=new DropDownChoice("dropDown",new
Model((Serializable)productPropertyOptionDAO.getResultList()),new
ChoiceRenderer("name"));
dropDownChoice.setRequired(true);
add(dropDownChoice);
}
}
<form wicket:id="productProposalForm">
<table><tr><td>
<fieldset>
<legend>Product Proposal</legend>
<font color="RED"><span
wicket:id="feedbackPanel"/></font>
<table>
<tr
wicket:id="productsPropertyListView">
<td><span
wicket:id="productPropertyName"></span></td>
<td><span
wicket:id="dropDown"></span></td>
</tr>
</table>
<input type="submit"
value="Hesapla" wicket:id="calculateButton"/>
</fieldset>
</td></tr></table>
</form>