culprit.
If I leave it out, the session grows only moderately, when I put it
in,
the
domain objects end up in the session... Anyway here is the code:
public class AuftragUebersicht extends MasterLayout {
@SpringBean
private AuftragBA auftragBA;
public AuftragUebersicht() {
this.initComponents();
}
private void initComponents() {
final AuftragDataView auftragDataView = new
AuftragDataView("resultList",
new AuftragDataProvider(AuftragUebersicht.this.auftragBA), 10);
Form form = new Form("searchForm") {
public Form initComponents() {
final TextField auftragsnummerField = new
TextField("auftragsnummer",
new
Model(""));
add(auftragsnummerField);
Button searchButton = new Button("search") {
public void onSubmit() {
String auftragsnummer =
auftragsnummerField.getModelObjectAsString();
AuftragDataProvider p = (AuftragDataProvider)
auftragDataView.getDataProvider();
p.setQuery(new AuftragUebersichtQuery(auftragsnummer));
if (auftragDataView.getDataProvider().size() == 0) {
AuftragUebersicht.this.info("No results found!");
}
}
};
add(searchButton);
return this;
}
}.initComponents();
WebMarkupContainer resultListContainer = new
WebMarkupContainer("resultListContainer") {
public boolean isVisible() {
return auftragDataView.getDataProvider().size() > 0;
}
};
CheckGroup group = new CheckGroup("group", new
ArrayList<PartnerAuftrag>());
group.add(new CheckGroupSelector("groupselector"));
group.add(auftragDataView);
resultListContainer.add(new PagingNavigator("navigator",
auftragDataView));
resultListContainer.add(group);
form.add(resultListContainer);
this.add(form);
}
}
public class AuftragDataView extends DataView {
public AuftragDataView(String id, IDataProvider dataProvider, int
itemsPerPage) {
super(id, dataProvider, itemsPerPage);
}
@Override
protected void populateItem(final Item item) {
final PartnerAuftrag auftrag = (PartnerAuftrag)
item.getModelObject();
item.add(new Label("auftragsnummer", auftrag.getAuftragsnummer()));
...
item.add(new Link("update", new Model(auftrag)) {
public void onClick() {
AuftragBearbeiten page = new AuftragBearbeiten((PartnerAuftrag)
getModelObject());
setResponsePage(page);
}
});
item.add(new AttributeModifier("class", true, new
AbstractReadOnlyModel() {
public Object getObject() {
return (item.getIndex() % 2 == 1) ? "even" : "odd";
}
}));
}
@Override
protected void onDetach() {
super.onDetach();
}
}
public class AuftragDataProvider implements IDataProvider {
private AuftragBA auftragBA;
private AuftragUebersichtQuery query;
private Collection<PartnerAuftrag> result;
public AuftragDataProvider(AuftragUebersichtQuery query, AuftragBA
auftragBA) {
this.query = query;
this.auftragBA = auftragBA;
}
public AuftragUebersichtQuery getQuery() {
return this.query;
}
public void setQuery(AuftragUebersichtQuery query) {
this.query = query;
this.result = null;
}
public Iterator<PartnerAuftrag> iterator(int first, int count) {
if (this.result == null) {
this.performQuery();
}
return new ArrayList<PartnerAuftrag>(this.result).subList(first,
first + count).iterator();
}
public IModel model(final Object object) {
return new DetachablePartnerAuftragModel((PartnerAuftrag) object,
this.auftragBA);
}
public int size() {
if (this.result == null) {
this.performQuery();
}
return this.result.size();
}
public void detach() {
this.result = null;
}
private void performQuery() {
...
}
}
public class DetachablePartnerAuftragModel extends
LoadableDetachableModel
{
private Long id;
private AuftragBA auftragBA;
public DetachablePartnerAuftragModel(PartnerAuftrag auftrag,
AuftragBA
auftragBA) {
this(auftrag.getAuftragsId(), auftragBA);
}
public DetachablePartnerAuftragModel(Long id, AuftragBA auftragBA) {
this.id = id;
this.auftragBA = auftragBA;
}
@Override
protected Object load() {
return this.auftragBA.findAuftragByAuftragsId(this.id);
}
@Override
protected void onDetach() {
super.onDetach();
}
}
Michael Sparer wrote:
> the objects shouldn't be serialized into the session if you're
using
> loadabledetachable models, please show us some code
>
> regards,
> Michael
>
>
> Jürgen Lind-2 wrote:
>> Hi,
>>
>> I have a question on how the DataView component is supposed to
work.
In my
>> application, I have to show quite large list of entities and so I
am
using
>> a DataView together with LoadableDetachableModels to read the
data
on
>> demand.
>> However, when looking at the serialized sessions, I can observe
that
the
>> session size constantly increases by a fairly large amount
although
I
am
>> just using the navigator to page through the list. Also, when
looking
into
>> the serialized session, I can see that the objects that are
supposed
to
>> be reloaded on demand are serialized into the session as well.
>>
>> Is this the behavior that I would expect from the DataView or am
I
making
>> some mistake here?
>>
>> Regards,
>>
>> J.
>>
>> --
>> Dr. Jürgen Lind
>> iteratec GmbH Fon: +49 (0)89 614551-44
>> Inselkammerstrasse 4 Fax: +49 (0)89 614551-10
>> 82008 Unterhaching Web: www.iteratec.de
>>
>> Sitz und Registergericht der iteratec GmbH: München HRB 113 519
>> Geschäftsführer: Klaus Eberhardt, Mark Goerke, Inge Hanschke,
Ralf
Menzel
>>
>>
>>
---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>> For additional commands, e-mail: users-h...@wicket.apache.org
>>
>>
>>
>
>
> -----
> Michael Sparer
> http://talk-on-tech.blogspot.com
--
Mit freundlichen Grüßen,
Jürgen Lind
--
Dr. Jürgen Lind
iteratec GmbH Fon: +49 (0)89 614551-44
Inselkammerstrasse 4 Fax: +49 (0)89 614551-10
82008 Unterhaching Web: www.iteratec.de
Sitz und Registergericht der iteratec GmbH: München HRB 113 519
Geschäftsführer: Klaus Eberhardt, Mark Goerke, Inge Hanschke, Ralf
Menzel
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org
-----