You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wicket.apache.org by JohnSmith333 <da...@msa.hinet.net> on 2007/09/08 15:03:24 UTC

Help ! CompoundPropertyMode and ArrayList Question

The code bellow:
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import wicket.markup.html.*;
import wicket.markup.html.basic.Label;
import wicket.markup.html.form.Form;
import wicket.markup.html.link.Link;
import wicket.markup.html.list.ListItem;
import wicket.markup.html.list.ListView;
import wicket.markup.html.panel.FeedbackPanel;
import wicket.markup.html.form.*;
import wicket.model.*;

public class TestPage extends WebPage implements Serializable
{
	private static final long serialVersionUID = 1L;
	
	private List testList=new ArrayList();

	private ListView testListView;

	public TestPage()
	{

		final FeedbackPanel testFeedback = new FeedbackPanel("testFeedback");
		add(testFeedback);
		
		WebMarkupContainer dataContainer = new WebMarkupContainer("data");
		dataContainer.setOutputMarkupId(true);
		this.add(dataContainer);
		
		testListView = new ListView("testList", testList){
			private static final long serialVersionUID = 1L;
			
			protected void populateItem(ListItem listItem){
				final TestTO to=(TestTO)listItem.getModelObject();
							
				listItem.add(new Label("file", to.getFileInput()));
				System.out.println("to.getFileInput(0:"+to.getFileInput());
				listItem.add(new Label("notes",to.getFileNotes()));		
				
				listItem.add(new Link("delete"){
					public void onClick()
					{
						testList.remove(to);

					}
				});
			}			
		};
		
		 dataContainer.add(testListView);
		

		 Form uploadForm = new Form("uploadform",new CompoundPropertyModel(new
TestTO())){
				private static final long serialVersionUID = 1L;
				
				protected void onSubmit(){
					
					TestTO to=(TestTO)getModelObject();
					
					       System.out.println("****** Input:"+to.getFileInput());

		                System.out.println("Now size a:"+testList.size());
		                if(testList.size()>0)
		                {		                	
		                	 System.out.println("First
value:"+((TestTO)testList.get(0)).getFileInput());
		                }
		                
						testList.add(to);
						
						 System.out.println("Now Size b:"+testList.size());
					
				}			 
		 };
		
		 uploadForm.add(new TextArea("fileNotes"));
			
		 uploadForm.add(new TextField("fileInput"));
		
		add(uploadForm);

	}

	private class TestTO implements Serializable{
		 private static final long serialVersionUID = 1L;
		
		  private String fileID;
		 
	      private String fileNotes;
	      
	      private String fileInput;
	      
	     public TestTO(){}
	     
		public String getFileID() {
			return fileID;
		}

		public void setFileID(String fileID) {
			this.fileID = fileID;
		}

		public String getFileNotes() {
			return fileNotes;
		}

		public void setFileNotes(String fileNotes) {
			this.fileNotes = fileNotes;
		}

		public String getFileInput() {
			return fileInput;
		}

		public void setFileInput(String fileInput) {
			this.fileInput = fileInput;
		}
	}
	
	}

and the html code:
<?xml version="1.0" encoding="UTF-8"?>







    
    
   
    

    	

	    File
	    
	    	
	    
	    
	    
	    

	    Note
	    
	    	
	    
	    
	    
	    

    
	 

		  
	 


    


      

        

            	File
            	Notes
            	Del
        
        

            	(file)
            	(notes)
            	  img/delete.gif  
        
      

    




******************* 
when execute the code, the console show:
****** Input:1
Now size a:0
Now Size b:1
to.getFileInput(0:1
****** Input:2
Now size a:1
First value:2
Now Size b:2
to.getFileInput(0:2
to.getFileInput(0:2
I first input 1 and then input 2 ,but the two value all become 2,why? Could
anyone help me to solve this question?
http://www.nabble.com/file/p12569419/test2.jpg 
-- 
View this message in context: http://www.nabble.com/Help-%21-CompoundPropertyMode-and-ArrayList-Question-tf4405830.html#a12569419
Sent from the Wicket - Dev mailing list archive at Nabble.com.

Re: Help ! CompoundPropertyMode and ArrayList Question

Posted by JohnSmith333 <da...@msa.hinet.net>.
Dear Kent:

  Thank's a lot.Thank you.It's a good solution.

Kent Tong wrote:
> 
> 
> JohnSmith333 wrote:
>> 
>>  Form uploadForm = new Form("uploadform",new CompoundPropertyModel(new
>> TestTO())){
>> 
> 
> This is the problem. You only add a single TestTO obj to it at constructor
> time. It means the page 
> will keep updating this object and adding the same object to the list. To
> fix it quickly, add a
> line:
> 	protected void onSubmit() {
> 		TestTO to = (TestTO) getModelObject();
> 		setModelObject(new TestTO());
> 		...
> 	}
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Help-%21-CompoundPropertyMode-and-ArrayList-Question-tf4405830.html#a12576579
Sent from the Wicket - Dev mailing list archive at Nabble.com.


Re: Help ! CompoundPropertyMode and ArrayList Question

Posted by Kent Tong <ke...@cpttm.org.mo>.

JohnSmith333 wrote:
> 
>  Form uploadForm = new Form("uploadform",new CompoundPropertyModel(new
> TestTO())){
> 

This is the problem. You only add a single TestTO obj to it at constructor
time. It means the page 
will keep updating this object and adding the same object to the list. To
fix it quickly, add a
line:
	protected void onSubmit() {
		TestTO to = (TestTO) getModelObject();
		setModelObject(new TestTO());
		...
	}


-- 
View this message in context: http://www.nabble.com/Help-%21-CompoundPropertyMode-and-ArrayList-Question-tf4405830.html#a12576099
Sent from the Wicket - Dev mailing list archive at Nabble.com.


Re: Help ! CompoundPropertyMode and ArrayList Question

Posted by Martijn Dashorst <ma...@gmail.com>.
On 9/8/07, Alex Objelean <al...@isdc.ro> wrote:
> everybody will just overlook your post. The most of developers are too lazy
> to find what exactly is not right with your code.

Not too lazy, but very time constrained.

Martijn

-- 
Buy Wicket in Action: http://manning.com/dashorst
Apache Wicket 1.3.0-beta3 is released
Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.3.0-beta3/

Re: Help ! CompoundPropertyMode and ArrayList Question

Posted by JohnSmith333 <da...@msa.hinet.net>.
Thanks for Alex's suggestion. Thank you!


Alex Objelean wrote:
> 
> John, sorry for not being helpful. But I think that this kind of posts
> (this is my code, why it doesn't work?) will not help you to find the
> problem. My suggestion is, try to debug your code, and if you have a more
> specific question, post it and somebody for sure will give you an answer.
> Otherwise, everybody will just overlook your post. The most of developers
> are too lazy to find what exactly is not right with your code.
> 
> Alex.
> 
> 
> 
> 
> JohnSmith333 wrote:
>> 
>> The code bellow:
>> import java.io.Serializable;
>> import java.util.ArrayList;
>> import java.util.List;
>> import wicket.markup.html.*;
>> import wicket.markup.html.basic.Label;
>> import wicket.markup.html.form.Form;
>> import wicket.markup.html.link.Link;
>> import wicket.markup.html.list.ListItem;
>> import wicket.markup.html.list.ListView;
>> import wicket.markup.html.panel.FeedbackPanel;
>> import wicket.markup.html.form.*;
>> import wicket.model.*;
>> 
>> public class TestPage extends WebPage implements Serializable
>> {
>> 	private static final long serialVersionUID = 1L;
>> 	
>> 	private List testList=new ArrayList();
>> 
>> 	private ListView testListView;
>> 
>> 	public TestPage()
>> 	{
>> 
>> 		final FeedbackPanel testFeedback = new FeedbackPanel("testFeedback");
>> 		add(testFeedback);
>> 		
>> 		WebMarkupContainer dataContainer = new WebMarkupContainer("data");
>> 		dataContainer.setOutputMarkupId(true);
>> 		this.add(dataContainer);
>> 		
>> 		testListView = new ListView("testList", testList){
>> 			private static final long serialVersionUID = 1L;
>> 			
>> 			protected void populateItem(ListItem listItem){
>> 				final TestTO to=(TestTO)listItem.getModelObject();
>> 							
>> 				listItem.add(new Label("file", to.getFileInput()));
>> 				System.out.println("to.getFileInput(0:"+to.getFileInput());
>> 				listItem.add(new Label("notes",to.getFileNotes()));		
>> 				
>> 				listItem.add(new Link("delete"){
>> 					public void onClick()
>> 					{
>> 						testList.remove(to);
>> 
>> 					}
>> 				});
>> 			}			
>> 		};
>> 		
>> 		 dataContainer.add(testListView);
>> 		
>> 
>> 		 Form uploadForm = new Form("uploadform",new CompoundPropertyModel(new
>> TestTO())){
>> 				private static final long serialVersionUID = 1L;
>> 				
>> 				protected void onSubmit(){
>> 					
>> 					TestTO to=(TestTO)getModelObject();
>> 					
>> 					       System.out.println("****** Input:"+to.getFileInput());
>> 
>> 		                System.out.println("Now size a:"+testList.size());
>> 		                if(testList.size()>0)
>> 		                {		                	
>> 		                	 System.out.println("First
>> value:"+((TestTO)testList.get(0)).getFileInput());
>> 		                }
>> 		                
>> 						testList.add(to);
>> 						
>> 						 System.out.println("Now Size b:"+testList.size());
>> 					
>> 				}			 
>> 		 };
>> 		
>> 		 uploadForm.add(new TextArea("fileNotes"));
>> 			
>> 		 uploadForm.add(new TextField("fileInput"));
>> 		
>> 		add(uploadForm);
>> 
>> 	}
>> 
>> 	private class TestTO implements Serializable{
>> 		 private static final long serialVersionUID = 1L;
>> 		
>> 		  private String fileID;
>> 		 
>> 	      private String fileNotes;
>> 	      
>> 	      private String fileInput;
>> 	      
>> 	     public TestTO(){}
>> 	     
>> 		public String getFileID() {
>> 			return fileID;
>> 		}
>> 
>> 		public void setFileID(String fileID) {
>> 			this.fileID = fileID;
>> 		}
>> 
>> 		public String getFileNotes() {
>> 			return fileNotes;
>> 		}
>> 
>> 		public void setFileNotes(String fileNotes) {
>> 			this.fileNotes = fileNotes;
>> 		}
>> 
>> 		public String getFileInput() {
>> 			return fileInput;
>> 		}
>> 
>> 		public void setFileInput(String fileInput) {
>> 			this.fileInput = fileInput;
>> 		}
>> 	}
>> 	
>> 	}
>> 
>> and the html code:
>> <?xml version="1.0" encoding="UTF-8"?>
>> <html xmlns="http://www.w3.org/1999/xhtml" >
>> <head>
>> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
>> <title></title>
>> </head>
>> <body>
>> 
>>     <form wicket:id="uploadform">
>>     
>>   <!--   [[ajax upload progressbar]] --> 
>>     <table border="1">
>>     	<tr><td>
>> 	    <label for="file">File</label>
>> 	    </td>
>> 	    <td>
>> 	    <input type="text" wicket:id="fileInput" />
>> 	   <!--  <input wicket:id="fileInput"  type="file" size="20"
>> maxlength="20"/> --> 
>> 	    </td></tr>
>> 	    <tr><td>
>> 	    <label for="note">Note</label>
>> 	    </td>
>> 	    <td>
>> 	    <textarea wicket:id="fileNotes" cols="20" rows="5"></textarea>
>> 	    <input type="submit" value="Submit"/>
>> 	    </td></tr>
>> 	    </table>
>>     </form>
>> 	 <div>
>> 		  
>> 	 </div>
>> 
>>     <div>
>> 
>>       <table width="240" border="1" bordercolor="orange"
>> wicket:id="data">
>>         <tr>
>>             <th width="100">File</th>
>>             <th width="100">Notes</th>
>>             <th width="50">Del</th>
>>         </tr>
>>         <tr wicket:id="testList">
>>             <td wicket:id="file">(file)</td>
>>             <td wicket:id="notes">(notes)</td>
>>             <td>  img/delete.gif  </td>
>>         </tr>
>>       </table>
>>     </div>
>> </body>
>> </html>
>> 
>> ******************* 
>> when execute the code, the console show:
>> ****** Input:1
>> Now size a:0
>> Now Size b:1
>> to.getFileInput(0:1
>> ****** Input:2
>> Now size a:1
>> First value:2
>> Now Size b:2
>> to.getFileInput(0:2
>> to.getFileInput(0:2
>> I first input 1 and then input 2 ,but the two value all become 2,why?
>> Could anyone help me to solve this question?
>>  http://www.nabble.com/file/p12569419/test2.jpg 
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Help-%21-CompoundPropertyMode-and-ArrayList-Question-tf4405830.html#a12571457
Sent from the Wicket - Dev mailing list archive at Nabble.com.


Re: Help ! CompoundPropertyMode and ArrayList Question

Posted by Alex Objelean <al...@isdc.ro>.
John, sorry for not being helpful. But I think that this kind of posts (this
is my code, why it doesn't work?) will not help you to find the problem. My
suggestion is, try to debug your code, and if you have a more specific
question, post it and somebody for sure will give you an answer. Otherwise,
everybody will just overlook your post. The most of developers are too lazy
to find what exactly is not right with your code.

Alex.




JohnSmith333 wrote:
> 
> The code bellow:
> import java.io.Serializable;
> import java.util.ArrayList;
> import java.util.List;
> import wicket.markup.html.*;
> import wicket.markup.html.basic.Label;
> import wicket.markup.html.form.Form;
> import wicket.markup.html.link.Link;
> import wicket.markup.html.list.ListItem;
> import wicket.markup.html.list.ListView;
> import wicket.markup.html.panel.FeedbackPanel;
> import wicket.markup.html.form.*;
> import wicket.model.*;
> 
> public class TestPage extends WebPage implements Serializable
> {
> 	private static final long serialVersionUID = 1L;
> 	
> 	private List testList=new ArrayList();
> 
> 	private ListView testListView;
> 
> 	public TestPage()
> 	{
> 
> 		final FeedbackPanel testFeedback = new FeedbackPanel("testFeedback");
> 		add(testFeedback);
> 		
> 		WebMarkupContainer dataContainer = new WebMarkupContainer("data");
> 		dataContainer.setOutputMarkupId(true);
> 		this.add(dataContainer);
> 		
> 		testListView = new ListView("testList", testList){
> 			private static final long serialVersionUID = 1L;
> 			
> 			protected void populateItem(ListItem listItem){
> 				final TestTO to=(TestTO)listItem.getModelObject();
> 							
> 				listItem.add(new Label("file", to.getFileInput()));
> 				System.out.println("to.getFileInput(0:"+to.getFileInput());
> 				listItem.add(new Label("notes",to.getFileNotes()));		
> 				
> 				listItem.add(new Link("delete"){
> 					public void onClick()
> 					{
> 						testList.remove(to);
> 
> 					}
> 				});
> 			}			
> 		};
> 		
> 		 dataContainer.add(testListView);
> 		
> 
> 		 Form uploadForm = new Form("uploadform",new CompoundPropertyModel(new
> TestTO())){
> 				private static final long serialVersionUID = 1L;
> 				
> 				protected void onSubmit(){
> 					
> 					TestTO to=(TestTO)getModelObject();
> 					
> 					       System.out.println("****** Input:"+to.getFileInput());
> 
> 		                System.out.println("Now size a:"+testList.size());
> 		                if(testList.size()>0)
> 		                {		                	
> 		                	 System.out.println("First
> value:"+((TestTO)testList.get(0)).getFileInput());
> 		                }
> 		                
> 						testList.add(to);
> 						
> 						 System.out.println("Now Size b:"+testList.size());
> 					
> 				}			 
> 		 };
> 		
> 		 uploadForm.add(new TextArea("fileNotes"));
> 			
> 		 uploadForm.add(new TextField("fileInput"));
> 		
> 		add(uploadForm);
> 
> 	}
> 
> 	private class TestTO implements Serializable{
> 		 private static final long serialVersionUID = 1L;
> 		
> 		  private String fileID;
> 		 
> 	      private String fileNotes;
> 	      
> 	      private String fileInput;
> 	      
> 	     public TestTO(){}
> 	     
> 		public String getFileID() {
> 			return fileID;
> 		}
> 
> 		public void setFileID(String fileID) {
> 			this.fileID = fileID;
> 		}
> 
> 		public String getFileNotes() {
> 			return fileNotes;
> 		}
> 
> 		public void setFileNotes(String fileNotes) {
> 			this.fileNotes = fileNotes;
> 		}
> 
> 		public String getFileInput() {
> 			return fileInput;
> 		}
> 
> 		public void setFileInput(String fileInput) {
> 			this.fileInput = fileInput;
> 		}
> 	}
> 	
> 	}
> 
> and the html code:
> <?xml version="1.0" encoding="UTF-8"?>
> <html xmlns="http://www.w3.org/1999/xhtml" >
> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
> <title></title>
> </head>
> <body>
> 
>     <form wicket:id="uploadform">
>     
>   <!--   [[ajax upload progressbar]] --> 
>     <table border="1">
>     	<tr><td>
> 	    <label for="file">File</label>
> 	    </td>
> 	    <td>
> 	    <input type="text" wicket:id="fileInput" />
> 	   <!--  <input wicket:id="fileInput"  type="file" size="20"
> maxlength="20"/> --> 
> 	    </td></tr>
> 	    <tr><td>
> 	    <label for="note">Note</label>
> 	    </td>
> 	    <td>
> 	    <textarea wicket:id="fileNotes" cols="20" rows="5"></textarea>
> 	    <input type="submit" value="Submit"/>
> 	    </td></tr>
> 	    </table>
>     </form>
> 	 <div>
> 		  
> 	 </div>
> 
>     <div>
> 
>       <table width="240" border="1" bordercolor="orange" wicket:id="data">
>         <tr>
>             <th width="100">File</th>
>             <th width="100">Notes</th>
>             <th width="50">Del</th>
>         </tr>
>         <tr wicket:id="testList">
>             <td wicket:id="file">(file)</td>
>             <td wicket:id="notes">(notes)</td>
>             <td>  img/delete.gif  </td>
>         </tr>
>       </table>
>     </div>
> </body>
> </html>
> 
> ******************* 
> when execute the code, the console show:
> ****** Input:1
> Now size a:0
> Now Size b:1
> to.getFileInput(0:1
> ****** Input:2
> Now size a:1
> First value:2
> Now Size b:2
> to.getFileInput(0:2
> to.getFileInput(0:2
> I first input 1 and then input 2 ,but the two value all become 2,why?
> Could anyone help me to solve this question?
>  http://www.nabble.com/file/p12569419/test2.jpg 
> 

-- 
View this message in context: http://www.nabble.com/Help-%21-CompoundPropertyMode-and-ArrayList-Question-tf4405830.html#a12570320
Sent from the Wicket - Dev mailing list archive at Nabble.com.