Hi,

since your customer's data are in session, i think you can use the session scope to display these data for the warehouses. Otherwise, you can also use hidden fields for warehouses data to simulate an input but don't use these data in your action if your use case is not meant to update them because an hidden field can not be trusted.

Regards

Sébastien

Le 12/10/2010 08:34, cellterry a écrit :
Dear All,

I have a form which is master-detail type containing customer information as
master and also warehouse information as detail. For one customer it may
contain more than one warehouse.

The Customer model class is as follows:

package model;

:
:

public class Customer {
        
        Integer id;
        String name;
        String address;
        String phone;
        String fax;
:
:

        Set<model.Warehouse>  warehouses;
:
:

When this form is loaded, it run action.Customer class which loads customer
property inside.

package action;



import java.text.SimpleDateFormat;

import java.util.*;



import javax.servlet.ServletContext;

import net.sf.jasperreports.engine.JasperCompileManager;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.Preparable;



@SuppressWarnings("serial")

public class Customer extends ActionSupport implements Preparable{



        boolean ok;

        boolean cancel;

        boolean save;

        boolean copy;

        boolean print;



        service.Customer serviceCustomer;

        service.Warehouse serviceWarehouse;


        model.Customer customer;



        action.Warehouses actionWarehouses;

:
:
        public String execute() throws Exception
        {
:
:
                if(customer==null)
                {
                
customer=(model.Customer)ActionContext.getContext().getSession().get("customer");
                        customer=serviceCustomer.get(customer.getId());
                }
                else
                {
                        
ActionContext.getContext().getSession().put("customer",customer);
                }

:
:


I also have Customer-validation.xml for this action:

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator
1.0.2//EN"
        "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd";>

<validators>
        <field name="customer.name">
                <field-validator type="requiredstring">
                        true
                        <message key="name.required" />
                </field-validator>
                <field-validator type="stringlength">
                        4
                        50
                        true
                        <message key="name.length" />
                </field-validator>
        </field>

:
:

When the form is submitted but validation fails, it is directed to the page
with result="input" in struts.xml which maps to my JSP form again. However,
warehouse information is lost.

I know why the information is lost as it is not inside form fields.

So I want to ask this master-detail situation which I think is a quite
general case, normally how should we handle it with presence of validation
xml?

Or I should do the validation in action class without using struts
validation xml?

I prefer to use the first method as it is more robust, but if it is
impossible I would adopt to use the second one.

Please advise! Thanks!

Terry.




---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org

Reply via email to