-------------This post is orignal sent to  Martin Gainty.

It seems he maybe busy now,so I post it to the list and wonder if any other
guys can do me a favor.

-------------------
---------- Forwarded message ----------
From: maven apache <apachemav...@gmail.com>
Date: 2011/3/19
Subject: Re: update a complex object through struts2
To: Martin Gainty <mgai...@hotmail.com>


Thank you very much  for your attention and patience.

The following is my codes,after trying the whole afternoon,I just can make
the adding task page,thougth there is also some problem:


I have a class named Task.

class Task{

    private int id;
    private String name;
    private List<Operator> managers; //the operator who will be responsible
for this task
    private List<TaskStep> steps;  //the required steps to complete this
task
    //getter and setter
}


class TaskStep{

    private int id;
    private String name;
    private List<Operator> operators;  //the operator who will directly do
this job
    private Status status;  // the status of this step(complted or not)
}
enum Status{
    ongoing,done;
}

My Action TaskAction(used to update and add task)
class TaskAction extends ActionSupport{
    private int taskid;
    private List<Operator> allOpInDb;
        private Task task;
    public String updatePage(){
        //retrive the Task of id "takid",
        task=new TaskDaoImpl().queryById(taskid); // put it in the
valuestack,so it can be referd in thejsp page
                //initization the allOpInDb
        allOpInDb=new OperatorDaoImpl().list();
        return "updatePage";
    }

    public String update(){
        //
    }
    public String addPage(){
      //initization the allOpInDb
      allOpInDb=new OperatorDaoImpl().list();
     }

    public String add(){
        //
    }
}

The struts.xml(core part)
<package name="task" extends="struts-default" >
    <action name="task_*" class="TaskAction" method="{1}">
        <result name="updatePage">/jsp/updatePage.jsp</result>
        <result name="update"></result>
        <result name="addPage">/jsp/addPage.jsp</result>
        <result name="add"></result>
    </action>
</package>



Now I have pages which are used to add/update a task(including its steps):

By entering : http://xxxx/task_addPage;
I get the addpage:
<s:form action="task_add.action">
    <s:textfield name="task.name" label="Task Name">
    <s:select list="allOpInDb" listKey="id" listValue="name" multiple="true"
label="Manager" name="task.managers.id"/>

    Steps:
    <!-- step01 -->
    <table>
        <tr>
            <th>Step Name</th>
            <th>Step Operators</th>
            <th>Step Status</th>
        </tr>
        <tr>
            <td><s:textfield name="task.steps[0].name"/></td>
            <td>
                <s:select list="allOpInDb" listKey="id" listValue="name"
multiple="true" name="task.steps[0].id" />
            </td>
            <td>
                <!-- Here,I do not know hwo to list the Status with the
radio button -->
                <s:radio list="xx" name="task.steps[0].status" />
            </td>
        </tr>
        <!-- step02 -->
        <tr>
            <td><s:textfield name="task.steps[2].name"/></td>
            <td>
                <s:select list="allOpInDb" listKey="id" listValue="name"
multiple="true" name="task.steps[2].id" />
            </td>
            <td>
                <!-- Here,I do not know hwo to list the Status with the
radio button -->
                <s:radio list="xx" name="task.steps[2].status" />
            </td>
        </tr>
    </table>
    <input type="text" value="add more steps">
</s:form>

Question:
1)when to add the "[index]" syntax?
For example:
"task.steps[0].id" use this syntax,but "task.managers.id" does not.
Both the steps and the managers are all java.uitl.List. I wonder why?

2)how to list the value of the enum type,in my case how to list
"ongoing","done" as two radio button in the page?


The above is the adding task page,and I have to build another page,updating
task.

By entering :http://xxx/task_updatePage?taskid=1<http://xxx/task_updatePage>
I get the update page,It seems that it is more complex than the adding page:

<s:form action="task_update.action">
    <s:textfield name="task.name" value="task.name" label="Task Name">
    <s:select list="allOpInDb" listKey="id" listValue="name" multiple="true"
label="Manager" name="task.managers.id" value="task.managers.id"/>
    <table>
        <tr>
            <th>Step Name</th>
            <th>Step Operators</th>
            <th>Step Status</th>
            <th>&nbsp;</th>
        </tr>
        <!-- Iterator the steps of this task(these steps have id in the db
yet) -->
        <s:iterator value="task.steps">
            <tr>
                <td><s:textfield name="xxx" value="#this.name"></td>
                <td>
                    <s:select list="allOpInDb" listKey="id" listValue="name"
multiple="true" name="xxx" value="#this.operators"/>
                </td>
                <td>
                    <!-- Here,I do not know hwo to list the Status with the
radio button -->
                    <s:radio list="xx" name="xxx" value="#this.status"/>
                </td>
                <td>
                    <!--set the order of the steps -->
                    <a>Make this step up</a><br>
                    <a>Make this step down</a>
                </td>
            </tr>
        </s:iterator>
    </table>
</s:form>

As you can see,in the form I can just read the value form the stack,but I do
not know how to set the "name" attribute of each input.

Also,suppose all of these question are solved which I mean the value can be
sent to the server side,so a new object of "Task" will be created by
struts,since I am update this task,so this task must own a id in the db,I
have the following things to do:
1)get the being updated Task from the db from the id.
2)copy all the field attributes of the Task object created by struts to the
Task object in the db,this is crazy,since there are so many fields in the
task,and even is field "List<TaskStep>" also own in in the db,I may make a
duplicate object and save it to db.

Any secury problem?

BTW,the tag "s:select" with property of "multiple='true'" will take too much
space in the page if the "list" own a large size,any way to slove this?

Reply via email to