Вот так выглядят мои занятия:
public abstract class BaseForm extends Z{
protected String someString;
public String getSomeString(){
return this.someString;
}
public void setSomeString(String some){
this.someString = some;
}
}
public abstract class AdvancedForm extends BaseForm{
protected Something selectedThing;
protected List<Something> listOfThings;
public Something getSelectedThing(){
return this.selectedThing;
}
public void setSelectedThing(Something thing){
this.selectedThing = thing;
}
public List<Something> getListOfThings(){
return this.listOfThings;
}
public void setListOfThings(List<Something> list){
this.listOfThings = list;
}
}
public class FinalForm extends AdvancedForm{
//Lot of stuff done here
}
Итак, у меня есть нечто похожее на то, что вы видите выше Проблема возникает, когда я создаю JSP, и он пытается вызвать методы get/setListOfThings
.
<html:html>
...
<html:select name="FinalForm" property="selectedThing">
<html:optionsCollection name="FinalForm" property="listOfThings" label="label" value="value" />
</html:select>
...
</html:html>
Я знаю, что здесь чего-то не хватает (struts-config.xml
и tiles-def.xml
существуют и являются правильными), но моя точка зрения заключается в том, что распорки должны вызывать метод FinalForm
setListOfThings
. И это должен вызывать метод AdvancedForm
setListOfThings
(который реализован), потому что FinalForm
расширяет AdvancedForm
, и я не переопределяю метод в FinalForm
.
Во всяком случае, это не работает, и я не знаю, что случилось. Единственный способ, которым он работает, - это переопределить метод и явно вызвать setListOfThings
из AdvancedForm
.
public class FinalForm extends AdvancedForm{
//...
public List<Something> getListOfThings(){
return super.getListOfThings();
}
}
Я хочу избежать этого переопределения, потому что цель создания AdvancedForm
класса состоит в том, чтобы удалить большую часть функциональности, которую использует большинство моих форм (но не все, это причина существования * 1029). * и AdvanceForm
классы).
Есть идеи, почему это не работает? Есть идеи, чтобы улучшить это? Кто-нибудь может объяснить мне, что я делаю не так? Заранее спасибо!