Yes, sorry. I have tried removing unessesary code. The dao objects is from
the base class that is sping injected via @SpringBean
This is the class that lists the items. When clicking on a link that edits
or adds an item see ItemPage
public class ItemListPage extends BaseAdministrationPage{
private List<ItemFilter> filters = new LinkedList<ItemFilter>();
private AggregatedItem aggregatedItem;
private WebMarkupContainer itemContainer;
List<se.edgesoft.hairless.entities.item.Item> items = new
ArrayList<se.edgesoft.hairless.entities.item.Item>();
public List<ItemFilter> getFilters() {
return filters;
}
public ItemListPage(){
IModel categoryModel = new LoadableDetachableModel(){
private static final long serialVersionUID = 1L;
protected Object load()
{
List<Category> categories = new
LinkedList<Category>();
List<MainCategory> mainCategories =
getCategoryDao().getMainCategories();
for( MainCategory main : mainCategories ){
categories.add( main );
List<SubCategory> subCategories =
getCategoryDao().getSubCategories(
main );
for( SubCategory sub : subCategories ){
categories.add( sub );
}
}
return categories;
}
};
final DropDownChoice categoryChoice = new
DropDownChoice("categories", new
Model(), categoryModel, new CategoryChoiceRenderer()){
private static final long serialVersionUID = 1L;
@Override
protected java.lang.CharSequence getDefaultChoice(final
Object selected){
return "<option value=\"0\">"+
getLocalizer().getString("category.choice.default", ItemListPage.this ) +
"</option>";
}
protected boolean
wantOnSelectionChangedNotifications() {
return true;
}
protected void onSelectionChanged(final Object obj ) {
if( obj instanceof Category ){
addFilter( new CategoryFilter(
(Category) obj ));
}else{
removeFilter( CategoryFilter.class );
}
refreshItemView();
}
};
categoryChoice.setEscapeModelStrings(false);
IModel brandsModel = new LoadableDetachableModel(){
private static final long serialVersionUID = 1L;
protected Object load()
{
return getBrandDao().getBrands();
}
};
final DropDownChoice brandChoice = new DropDownChoice("brands",
new
Model(), brandsModel,new BrandChoiceRenderer()){
private static final long serialVersionUID = 1L;
@Override
protected java.lang.CharSequence getDefaultChoice(final
Object selected){
return "<option value=\"0\">"+
getLocalizer().getString("brand.choice.default", ItemListPage.this ) +
"</option>";
}
protected boolean
wantOnSelectionChangedNotifications() {
return true;
}
protected void onSelectionChanged(final Object obj ) {
if( obj instanceof Brand ){
addFilter( new BrandFilter( (Brand)
obj ));
}else{
removeFilter( BrandFilter.class );
}
refreshItemView();
}
};
Form itemForm = new Form( "itemForm" );
itemForm.add( brandChoice );
itemForm.add( categoryChoice );
add( itemForm );
itemContainer = new WebMarkupContainer( "itemContainer" ){
private static final long serialVersionUID = 1L;
@Override
public boolean isVisible(){
if( getItems() == null ) return false;
if( getItems().isEmpty() ) return false;
return true;
}
};
add( itemContainer );
refreshItemView();
add( new Link( "addItem" ){
private static final long serialVersionUID = 1L;
@Override
public void onClick() {
setResponsePage( new ItemPage() );
}
});
}
private void updateItems(){
aggregatedItem = getItemDao().getAggregatedItem(getFilters());
items = getItemDao().getItems( getFilters() );
}
public List<se.edgesoft.hairless.entities.item.Item> getItems(){
return items;
}
private void refreshItemView(){
updateItems();
itemContainer.addOrReplace( new ItemFragment( "itemPanel" ,
"itemView") );
}
private final class ItemFragment extends Fragment
{
private static final long serialVersionUID = 0L;
public ItemFragment( final String panel, final String id)
{
super(panel, id, ItemListPage.this );
final DataView view = new DataView( "itemDataView", new
ListDataProvider( getItems() ) ) {
private static final long serialVersionUID = 1L;
public void populateItem(final Item item) {
final
se.edgesoft.hairless.entities.item.Item i =
(se.edgesoft.hairless.entities.item.Item) item.getModelObject();
Link itemLink = new Link(
"itemLink" ){
private static final
long serialVersionUID = 1L;
@Override
public void onClick() {
setResponsePage( new ItemPage( i ) );
}
};
item.add( new Label( "id" ,
i.getId().toString() ) );
itemLink.add( new Label(
"identifier" , i.getIdentifier() ) );
item.add( itemLink );
item.add( new Label(
"cachedBalance" , i.getCachedBalance().toString()
) );
item.add( new Label( "value" ,
"" + i.getValue() ) );
item.add( new Label( "price" ,
"" + i.getPrice() ) );
item.add( new Label(
"memberPrice" , "" + i.getMemberPrice() ) );
}
};
view.setItemsPerPage(10);
add(view);
add(new PagingNavigator("navigator", view));
}
}
@SuppressWarnings( "unchecked" )
public void removeFilter( Class clazz ){
Iterator<ItemFilter> iter = getFilters().iterator();
while( iter.hasNext() ){
ItemFilter filter = (ItemFilter)iter.next();
if( clazz.equals( filter.getClass() )){
iter.remove();
break;
}
}
}
public void removeFilter( ItemFilter f ){
Iterator<ItemFilter> iter = getFilters().iterator();
while( iter.hasNext() ){
ItemFilter filter = (ItemFilter)iter.next();
if( f.getClass().equals( filter.getClass() )){
iter.remove();
break;
}
}
}
public void addFilter( ItemFilter f ){
removeFilter( f );
getFilters().add( f );
}
public AggregatedItem getAggregatedItem() {
return aggregatedItem;
}
}
ItemPage
public class ItemPage extends BaseAdministrationPage {
private Form itemForm;
private Item item;
public ItemPage(){
this( new Item() );
}
public ItemPage( Item item ){
this.item = item;
IModel categoryDetachedFromCompound;
if( item.getId() == null ){
item.setEarliestDeliveryDate( new Date() );
categoryDetachedFromCompound = new Model();
}else{
categoryDetachedFromCompound = new Model(
getItem().getSubCategory() );
}
final CSSFeedbackPanel panel = new CSSFeedbackPanel( "feedback"
);
panel.setOutputMarkupId(true);
add( panel );
IModel collectionModel = new LoadableDetachableModel(){
private static final long serialVersionUID = 1L;
protected Object load(){
return getCollectionDao().getCollections();
}
};
IModel colorStoryModel = new LoadableDetachableModel(){
private static final long serialVersionUID = 1L;
protected Object load(){
if( getItem().getCollection() != null &&
getItem().getBrand() != null ){
return
getColorStoryDao().getColorStories( getItem().getCollection() ,
getItem().getBrand());
}else{
return Collections.EMPTY_LIST;
}
}
};
IModel brandsModel = new LoadableDetachableModel(){
private static final long serialVersionUID = 1L;
protected Object load(){
return getBrandDao().getBrands();
}
};
IModel categoryModel = new LoadableDetachableModel(){
private static final long serialVersionUID = 1L;
protected Object load(){
List<Category> categories = new
LinkedList<Category>();
List<MainCategory> mainCategories =
getCategoryDao().getMainCategories();
for( MainCategory main : mainCategories ){
categories.add( main );
List<SubCategory> subCategories =
getCategoryDao().getSubCategories(
main );
for( SubCategory sub : subCategories ){
categories.add( sub );
}
}
return categories;
}
};
final DropDownChoice colorStoryChoice = new
DropDownChoice("colorStory",
colorStoryModel, new ColorStoryChoiceRenderer()){
private static final long serialVersionUID = 1L;
@Override
protected java.lang.CharSequence getDefaultChoice(final
Object selected){
return "<option value=\"\">"+
getLocalizer().getString("colorstory.choice.default", ItemPage.this ) +
"</option>";
}
};
colorStoryChoice.setNullValid( true );
colorStoryChoice.setOutputMarkupId( true );
final DropDownChoice collectionChoice = new
DropDownChoice("collection",
collectionModel, new CollectionChoiceRenderer()){
private static final long serialVersionUID = 1L;
@Override
protected java.lang.CharSequence getDefaultChoice(final
Object selected){
return "<option value=\"\">"+
getLocalizer().getString("collection.choice.default", ItemPage.this ) +
"</option>";
}
};
collectionChoice.add(new
AjaxFormComponentUpdatingBehavior("onchange"){
private static final long serialVersionUID = 1L;
protected void onUpdate(AjaxRequestTarget target){
if( getItem().getCollection() != null && getItem().getBrand()
!= null ){
target.addComponent(colorStoryChoice);
}
}
});
collectionChoice.setRequired( true );
final DropDownChoice categoryChoice = new
DropDownChoice("subCategory",
categoryDetachedFromCompound, categoryModel, new CategoryChoiceRenderer()){
private static final long serialVersionUID = 1L;
@Override
protected java.lang.CharSequence getDefaultChoice(final
Object selected){
return "<option value=\"0\">"+
getLocalizer().getString("category.choice.default", ItemPage.this ) +
"</option>";
}
};
categoryChoice.add(new
AjaxFormComponentUpdatingBehavior("onchange"){
private static final long serialVersionUID = 1L;
protected void onUpdate(AjaxRequestTarget target){
target.addComponent(panel);
if( ! ( categoryChoice.getModelObject()
instanceof SubCategory ) ){
info( "Please choose a subcategory" );
}
}
});
categoryChoice.setRequired( true );
categoryChoice.setEscapeModelStrings(false);
final DropDownChoice brandChoice = new DropDownChoice("brand",
brandsModel,new BrandChoiceRenderer()){
private static final long serialVersionUID = 1L;
@Override
protected java.lang.CharSequence getDefaultChoice(final
Object selected){
return "<option value=\"0\">"+
getLocalizer().getString("brand.choice.default", ItemPage.this ) +
"</option>";
}
};
brandChoice.add(new
AjaxFormComponentUpdatingBehavior("onchange"){
private static final long serialVersionUID = 1L;
protected void onUpdate(AjaxRequestTarget target){
if( getItem().getCollection() != null && getItem().getBrand()
!= null ){
target.addComponent(colorStoryChoice);
}
}
});
brandChoice.setRequired( true );
TextField identifier = new TextField( "identifier" );
identifier.add( StringValidator.lengthBetween( 1, 255));
identifier.setRequired( true );
TextField earliestDeliveryDate = new TextField(
"earliestDeliveryDate" );
earliestDeliveryDate.setRequired( true );
TextField discount = new TextField( "discount" );
discount.setRequired( true );
discount.add( NumberValidator.range( 0 , 100 ));
TextField memberPrice = new TextField( "memberPrice" );
memberPrice.setRequired( true );
TextField price = new TextField( "price" );
price.setRequired( true );
TextField value = new TextField( "value" );
value.setRequired( true );
CompoundPropertyModel itemModel = new CompoundPropertyModel(
item );
itemForm = new Form( "itemForm", itemModel){
private static final long serialVersionUID = 1L;
@Override
protected void onSubmit()
{
Item item = (Item) itemForm.getModelObject();
if( ! ( categoryChoice.getModelObject()
instanceof SubCategory ) ){
info( "Please choose a subcategory" );
return;
}
item.setSubCategory( (SubCategory)
categoryChoice.getModelObject() );
if( ! item.hasGender() ){
info( "You must choose at least one
gender" );
return;
}
if( item.getId() == null ){
item.setAddedDate( new Date() );
item.setCachedBalance( new Long(0));
}
getItemDao().save( item );
info( "Item saved!" );
getPage().addOrReplace( new
ItemFragment("itemSelectionPanel",
"itemFragment"));
}
};
itemForm.add( colorStoryChoice );
itemForm.add( collectionChoice );
itemForm.add( brandChoice );
itemForm.add( categoryChoice );
itemForm.add( memberPrice );
itemForm.add( price );
itemForm.add( value );
itemForm.add( new CheckBox( "female" ) );
itemForm.add( new CheckBox( "male" ) );
itemForm.add( new CheckBox( "junior" ) );
itemForm.add( identifier );
itemForm.add( earliestDeliveryDate );
itemForm.add( discount );
add( itemForm );
if( getItem().getId() != null ){
add( new ItemFragment("itemSelectionPanel",
"itemFragment"));
}else{
add( new Label("itemSelectionPanel"));
}
}
public Item getItem() {
return item;
}
/**
* Fragment for adding , editing translation for a
* store.
* The item must exists before this fragment is visible.
* @author Mathias Nilsson
*
*/
private final class ItemFragment extends Fragment
{
private static final long serialVersionUID = 1L;
public ItemFragment( String panel, String id ){
super(panel, id, ItemPage.this );
IModel availableStoresModel = new
LoadableDetachableModel(){
private static final long serialVersionUID = 1L;
protected Object load()
{
return
getStoreDao().getAvailableStores( getItem() );
}
};
IModel unusedStoresModel = new
LoadableDetachableModel(){
private static final long serialVersionUID = 1L;
protected Object load()
{
return getStoreDao().getUnusedStores(
getItem() );
}
};
final DropDownChoice availableStoresChoice = new
DropDownChoice(
"availableStores", new Model( "" ),availableStoresModel, new
StoreChoiceRenderer()){
private static final long serialVersionUID = 1L;
@Override
protected java.lang.CharSequence
getDefaultChoice(final Object
selected){
return "<option value=\"\">--- Edit
item for store ---</option>";
}
protected boolean
wantOnSelectionChangedNotifications() {
return true;
}
protected void onSelectionChanged(final Object
obj ) {
if( obj instanceof Store ){
Store store = (Store) obj;
setResponsePage( new
ItemStorePage( getItem(), store ) );
}
}
@Override
public boolean isVisible(){
if( getChoices().size() > 0 ){
return true;
}
return false;
}
};
final DropDownChoice unusedStoresChoice = new
DropDownChoice(
"unusedStores", new Model( "" ),unusedStoresModel, new
StoreChoiceRenderer()){
private static final long serialVersionUID = 1L;
@Override
protected java.lang.CharSequence
getDefaultChoice(final Object
selected){
return "<option value=\"\">--- New item
for store ---</option>";
}
protected boolean
wantOnSelectionChangedNotifications() {
return true;
}
protected void onSelectionChanged(final Object
obj ) {
if( obj instanceof Store ){
Store store = (Store) obj;
setResponsePage( new
ItemStorePage( getItem(), store ) );
}
}
@Override
public boolean isVisible(){
if( getChoices().size() > 0 ){
return true;
}
return false;
}
};
final IModel elementModel = new
LoadableDetachableModel(){
private static final long serialVersionUID = 1L;
protected Object load()
{
return getCategoryDao().getElements(
getItem().getSubCategory() );
}
};
Form itemStoreForm = new Form( "itemStoreForm" );
itemStoreForm.add( availableStoresChoice );
itemStoreForm.add( unusedStoresChoice );
Link attributeLink = new Link( "attributeLink" ){
@Override
public void onClick() {
setResponsePage( new AttributePage(
getItem() ) );
}
@Override
public boolean isVisible(){
List<Element> elements = (List<Element>
)elementModel.getObject();
if( elements == null || elements.size()
== 0 ){
return false;
}
return true;
}
};
itemStoreForm.add( attributeLink );
add( itemStoreForm );
}
}
}
And when adding translation to the item I get lazy loading exception
public class ItemStorePage extends BaseAdministrationPage {
private Item item;
private Store store;
private ItemTranslation itemTranslation;
public ItemStorePage( Item item, Store store ){
this.item = item;
this.store = store;
initiateTranslation();
final FeedbackPanel panel = new FeedbackPanel( "feedback" );
panel.setOutputMarkupId(true);
add( panel );
Form itemForm = new Form( "itemForm", new CompoundPropertyModel(
getItemTranslation()) ){
private static final long serialVersionUID = 1L;
@Override
protected void onSubmit()
{
if( getItemTranslation().getId() == null ){
/**
* Add Item to stort
*/
//getItem().addStore( getStore() );
List<Store> stores = new
LinkedList<Store>();
stores.add( getStore() );
getItem().setStores( stores );
getItemDao().save( getItem() );
}
getTranslationDao().save(
getItemTranslation(), getItem() );
info( "Item updated!" );
}
};
/** Adding data for translation */
TextArea shortDescription = new TextArea( "shortDescription" );
TextArea longDescription = new TextArea( "longDescription" );
TextField name = new TextField( "name" );
shortDescription.add( StringValidator.lengthBetween( 1, 500 ));
shortDescription.setRequired( true );
longDescription.add( StringValidator.lengthBetween( 1, 1000 ));
longDescription.setRequired( true );
name.add( StringValidator.lengthBetween( 1, 255 ));
name.setRequired( true );
itemForm.add( shortDescription );
itemForm.add( longDescription );
itemForm.add( name );
add( itemForm );
add( new Label( "itemId", getItem().getId().toString() ));
}
public void initiateTranslation(){
itemTranslation = getTranslationDao().getTranslation(
getStore(), getItem(
));
if( itemTranslation == null ){
itemTranslation = new ItemTranslation();
itemTranslation.setItem( getItem() );
itemTranslation.setStore( store );
}
}
public Item getItem() {
return item;
}
public Store getStore() {
return store;
}
public ItemTranslation getItemTranslation() {
return itemTranslation;
}
}
--
View this message in context:
http://www.nabble.com/How-to-avoid-Lazy-loading-exception-tp17040941p17065528.html
Sent from the Wicket - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]