You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by grazia <Gr...@gmail.com> on 2013/03/10 14:41:16 UTC
on models and Panels
I have a panel containing an autocomplete. The autocomplete contains its own
converter.
The model of the page that contains the autocomplete-panel should be updated
to the converted object of the autocomplete, and it does, but (here it shows
my lack of wicket knowledge) somehow it gets set once with the full
converted object, and once with an object where only the name field of the
object has been set (the rest being null).
Here is a skeleton of the code (Panel and page where it is used)
public class NewPanel extends Panel {
final Component targetComponent;
final AutoCompleteTextField<Code> codeAutoComplete;
public NewPanel(final String id,
final IModel<Code> codeModel, final Component component) {
super(id);
this.targetComponent = component;
codeAutoComplete = new AutoCompleteTextField<Code>(
"code",
new PropertyModel<Code>(codeModel.getObject(), "code"),
getAutocompleteRenderer()) {
@Override
protected Iterator<Code> getChoices(String input) {
(...)
}
@Override
public final IConverter getConverter(Class type) {
return new IConverter() { (...) }
};
codeAutoComplete.add(new
AjaxFormComponentUpdatingBehavior(
"onchange") {
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
codeModel.setObject(codeAutoComplete.getConvertedInput());
target.add(targetComponent);
}
});
codeAutoComplete.setType(Code.class);
add(codeAutoComplete);
}
public class NewCodeAssociationPage extends WebPage {
private IModel<Code> pascodeModel = new Model<Code>(new Code());
final Set<Code> codeList = new HashSet<Code>();
final IModel<List<Code>> associatedCodes = new
LoadableDetachableModel<List<Code>>() {
@Override
protected List<Code> load() {
(...)
};
};
final IModel<List<Code>> availableCodes = new
LoadableDetachableModel<List<Code>>() {
@Override
protected List<Code> load() {
if (codeModel.getObject() != null) {
codeList.add(codeModel.getObject());
}
codeList.addAll(associatedCodes.getObject());
return new ArrayList<Code>(codeList);
}
};
public NewCodeAssociationPage() {
final Form<Code> form = new Form<Code>("form");
final Palette<Code> palette = new Palette<Code>("palette",
associatedCodes, availableCodes,
new ChoiceRenderer<Code>("code", "codeId"), 25, false);
palette.setOutputMarkupId(true);
final NewCodePanel codePanel = new NewCodePanel(
"codeAutoCompletePanel", codeModel, palette);
}
}
THe set codeList in the NewCodeAssociationPage ends up containing a
"converted" Code object ( so, something looking like
Code[code=ABCDE,codeId=30] AND also the same just with the code name
specified: Code[code=ABCDE,codeId=null] So, it ends up showing twice in my
palette.
THere is something incorrect I do with the autocomplete panel and the model,
and I have not understood what it is. I would greatly appreciate any pointer
in the right direction.
--
View this message in context: http://apache-wicket.1842946.n4.nabble.com/on-models-and-Panels-tp4657131.html
Sent from the Users forum mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: on models and Panels
Posted by grazia <Gr...@gmail.com>.
THanks, Sven ! THat was very helpful.
Although now, the palette shows an empty row ...
--
View this message in context: http://apache-wicket.1842946.n4.nabble.com/on-models-and-Panels-tp4657131p4657138.html
Sent from the Users forum mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: on models and Panels
Posted by Sven Meier <sv...@meiers.net>.
Hi,
these lines don't make sense:
codeAutoComplete = new AutoCompleteTextField<Code>(
"code",
new PropertyModel<Code>(codeModel.getObject(), "code"),
getAutocompleteRenderer()) {
If codeModel contains a Code instance, why are binding the autocomplete
on a "code" property of the code object? It should the following:
codeAutoComplete = new AutoCompleteTextField<Code>(
"code",
codeModel,
getAutocompleteRenderer()) {
Sven
On 03/10/2013 02:41 PM, grazia wrote:
> I have a panel containing an autocomplete. The autocomplete contains its own
> converter.
> The model of the page that contains the autocomplete-panel should be updated
> to the converted object of the autocomplete, and it does, but (here it shows
> my lack of wicket knowledge) somehow it gets set once with the full
> converted object, and once with an object where only the name field of the
> object has been set (the rest being null).
>
> Here is a skeleton of the code (Panel and page where it is used)
>
> public class NewPanel extends Panel {
>
> final Component targetComponent;
> final AutoCompleteTextField<Code> codeAutoComplete;
>
> public NewPanel(final String id,
> final IModel<Code> codeModel, final Component component) {
> super(id);
> this.targetComponent = component;
>
> codeAutoComplete = new AutoCompleteTextField<Code>(
> "code",
> new PropertyModel<Code>(codeModel.getObject(), "code"),
> getAutocompleteRenderer()) {
>
> @Override
> protected Iterator<Code> getChoices(String input) {
> (...)
> }
> @Override
> public final IConverter getConverter(Class type) {
> return new IConverter() { (...) }
> };
> codeAutoComplete.add(new
> AjaxFormComponentUpdatingBehavior(
> "onchange") {
>
> private static final long serialVersionUID = 1L;
>
> @Override
> protected void onUpdate(AjaxRequestTarget target) {
> codeModel.setObject(codeAutoComplete.getConvertedInput());
> target.add(targetComponent);
>
> }
> });
> codeAutoComplete.setType(Code.class);
> add(codeAutoComplete);
>
> }
>
> public class NewCodeAssociationPage extends WebPage {
>
> private IModel<Code> pascodeModel = new Model<Code>(new Code());
> final Set<Code> codeList = new HashSet<Code>();
>
> final IModel<List<Code>> associatedCodes = new
> LoadableDetachableModel<List<Code>>() {
> @Override
> protected List<Code> load() {
> (...)
> };
> };
>
> final IModel<List<Code>> availableCodes = new
> LoadableDetachableModel<List<Code>>() {
>
> @Override
> protected List<Code> load() {
> if (codeModel.getObject() != null) {
> codeList.add(codeModel.getObject());
> }
> codeList.addAll(associatedCodes.getObject());
> return new ArrayList<Code>(codeList);
> }
> };
> public NewCodeAssociationPage() {
>
>
> final Form<Code> form = new Form<Code>("form");
> final Palette<Code> palette = new Palette<Code>("palette",
> associatedCodes, availableCodes,
> new ChoiceRenderer<Code>("code", "codeId"), 25, false);
> palette.setOutputMarkupId(true);
>
> final NewCodePanel codePanel = new NewCodePanel(
> "codeAutoCompletePanel", codeModel, palette);
> }
>
> }
>
> THe set codeList in the NewCodeAssociationPage ends up containing a
> "converted" Code object ( so, something looking like
> Code[code=ABCDE,codeId=30] AND also the same just with the code name
> specified: Code[code=ABCDE,codeId=null] So, it ends up showing twice in my
> palette.
> THere is something incorrect I do with the autocomplete panel and the model,
> and I have not understood what it is. I would greatly appreciate any pointer
> in the right direction.
>
>
>
> --
> View this message in context: http://apache-wicket.1842946.n4.nabble.com/on-models-and-Panels-tp4657131.html
> Sent from the Users forum mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org