The Recipe object is indeed serializable. Below some code from
the AddRecipeForm and Recipe:

public class Recipe implements Serializable {
    public static final int NAME_LENGTH           = 50;
    public static final int DIFFICULTY_LENGTH   = 6;
    public static final int INTRODUCTION_LENGTH = 150;

    @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator =
"recipe_seq")
    private Long id;
    ...

    @ManyToOne
    @org.hibernate.annotations.Cascade(CascadeType.SAVE_UPDATE)
    @JoinColumn(name = "CATEGORY_ID")
    @ForeignKey(name = "FK_RECIPE_CATEGORY")
    private Category category;
    ...

    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        assert category != null;
        this.category = category;
    }
}

public class AddRecipeForm extends Form<Recipe> {
    private static final Logger log =
LoggerFactory.getLogger(AddRecipeForm.class);

    private final List<FileUpload> uploads = new ArrayList<FileUpload>();
    private Recipe recipe = new Recipe();

    /**
     * Creates a new {...@link AddRecipeForm}.
     *
     * @param id form id; may not be <code>null</code>
     */
    public AddRecipeForm(String id) {
        super(id);
        setModel(new Model<Recipe>(recipe));

        add(new FeedbackPanel("feedback"));
        addRecipeInfoFormPart();
        ...
        add(createSubmitLink(this));
    }

    private void addRecipeInfoFormPart() {
        add(new RequiredTextField<String>("recipeTitle", new
PropertyModel<String>(recipe, "name"))
                .add(StringValidator.lengthBetween(5, Recipe.NAME_LENGTH)));
        add(new CategoriesDropDown("categories", new
PropertyModel<Category>(recipe, "category")).setRequired(true));
        add(new RecipeDifficultiesDropDown("difficulties",
recipe).setRequired(true));
        add(new TextArea<String>("introduction", new
PropertyModel<String>(recipe, "introduction")));
    }
   ...
    private StyledSubmitLink createSubmitLink(final Form<Recipe> form) {
        StyledSubmitLink submitLink = new StyledSubmitLink("submitLink") {
            @Override
            public void onSubmit() {
                RecipeService recipeService = RecipeService.getInstance();
                Recipe recipe = form.getModelObject();
                Category recipeCategory =
recipeService.findCategoryByCategoryName(recipe.getCategory().getName());
                Set<Tag> persistentTags = new HashSet<Tag>();
                for (Tag tag : recipe.getTags()) {
                    Tag persistentTag =
recipeService.findTagByTagName(tag.getName());
                    persistentTags.add(persistentTag == null ? tag :
persistentTag);
                }
                log.debug(String.format("from persisted cat: %s and from
form %s", recipeCategory.getName(), recipe.getCategory().getName()));
                Status persistentStatus =
recipeService.findStatusByStatusName("NEW");
                Recipe newRecipe = new Recipe(recipeCategory,
                        recipe.getDifficulty(),
                        recipe.getIntroduction(),
                        recipe.getMethod(),
                        recipe.getName(),
                        new Integer(0),
                        UserUtils.getUser(),
                        recipe.getPreparationTime(),
                        recipe.getRecipeImages(),
                        new
HashSet<RecipeIngredient>(recipe.getRecipeIngredients()),
                        recipe.getServings(),
                        persistentStatus == null ? new Status("NEW", "New")
: persistentStatus,
                        persistentTags);

                uploadImages();

                recipeService.insertNewRecipe(newRecipe);
                setResponsePage(new
SuccessPage(getString("message.success.addrecipe.title"),
                        getString("message.success.addrecipe.body")));
            }
        };
        submitLink.add(new Label("submit", new
ResourceModel("form.addrecipe.add")));
        return submitLink;
    }

    private class CategoriesDropDown extends DropDownChoice<Category> {
        public CategoriesDropDown(String id, IModel<Category> model) {
            super(id, model,
RecipeService.getInstance().getAllPersistentRecipeCategories());
            setChoiceRenderer(new IChoiceRenderer<Category>() {
                @Override
                public String getIdValue(Category category, int index) {
                    return category.getName();
                }

                @Override
                public Object getDisplayValue(Category category) {
                    return category.getName();
                }
            });
        }
    }

    private class RecipeDifficultiesDropDown extends
DropDownChoice<RecipeDifficulty> {
        public RecipeDifficultiesDropDown(String id, Recipe recipe) {
            super(id, new PropertyModel<RecipeDifficulty>(recipe,
"difficulty"), Arrays.asList(RecipeDifficulty.values()),
                    new IChoiceRenderer<RecipeDifficulty>() {
                        @Override
                        public Object getDisplayValue(RecipeDifficulty
recipeDifficulty) {
                            return
recipeDifficulty.getFormattedDifficulty();
                        }

                        @Override
                        public String getIdValue(RecipeDifficulty
recipeDifficulty, int index) {
                            return recipeDifficulty.getName();
                        }
            });
        }
    }
}

On Sat, Feb 28, 2009 at 6:24 PM, Igor Vaynberg <igor.vaynb...@gmail.com>wrote:

> where is the code that creates your form? and is Recipe serializable?
>
> -igor
>
> On Sat, Feb 28, 2009 at 8:58 AM, Azzeddine Daddah <waarhei...@gmail.com>
> wrote:
> > Thanks Igor,
> > I've already tried that but still have the same problem.
> > add(new CategoriesDropDown("categories", new
> PropertyModel<Category>(recipe,
> > "category")).setRequired(true));
> > ...
> > private class CategoriesDropDown extends DropDownChoice<Category> {
> >        public CategoriesDropDown(String id, IModel<Category> model) {
> >            super(id, model,
> > RecipeService.getInstance().getAllPersistentRecipeCategories(),
> >                    new IChoiceRenderer<Category>() {
> >                @Override
> >                public String getIdValue(Category category, int index) {
> >                    return category.getName();
> >                }
> >
> >                @Override
> >                public Object getDisplayValue(Category category) {
> >                    return category.getName();
> >                }
> >            });
> >        }
> >    }
> >
> >
> >
> > On Sat, Feb 28, 2009 at 5:54 PM, Igor Vaynberg <igor.vaynb...@gmail.com
> >wrote:
> >
> >> use a property model instead of recipe.getcategories()
> >>
> >> -igor
> >>
> >> On Sat, Feb 28, 2009 at 8:17 AM, Azzeddine Daddah <waarhei...@gmail.com
> >
> >> wrote:
> >> > Hi,
> >> > I'm trying to use a DropDownChoice to display and store the selected
> >> > category in the database. The value selected in the drop down is
> >> correctly
> >> > set, but when I look to the model (Category) of this drop down, it
> >> returns
> >> > always null. Do I do something wrong? Below some code.
> >> >
> >> > public AddRecipeForm(String id) {
> >> >        super(id);
> >> >        setModel(new Model<Recipe>(new Recipe()));
> >> >        ...
> >> >        add(new CategoriesDropDown("categories",
> >> > recipe.getCategory()).setRequired(true));
> >> > }
> >> > ...
> >> > public void onSubmit() {
> >> >    RecipeService recipeService = RecipeService.getInstance();
> >> >    Recipe recipe = form.getModelObject();
> >> >    Category cat = recipe.getCategory(); // This returns always null
> >> > }
> >> >
> >> > ...
> >> >
> >> > private class CategoriesDropDown extends DropDownChoice<Category> {
> >> >        public CategoriesDropDown(String id, Category category) {
> >> >            super(id, new Model<Category>(category),
> >> > RecipeService.getInstance().getAllPersistentRecipeCategories(), new
> >> > IChoiceRenderer<Category>() {
> >> >                @Override
> >> >                public String getIdValue(Category category, int index)
> {
> >> >                    return category.getName();
> >> >                }
> >> >
> >> >                @Override
> >> >                public Object getDisplayValue(Category category) {
> >> >                    return category.getName();
> >> >                }
> >> >            });
> >> >        }
> >> >    }
> >> >
> >> >
> >> > Kind regards,
> >> >
> >> > Hbiloo
> >> >
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> >> For additional commands, e-mail: users-h...@wicket.apache.org
> >>
> >>
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>

Reply via email to