autocomplete ->update doesn't work

UI Components for JSF
Post Reply
stellio
Posts: 10
Joined: 26 Apr 2011, 13:28

27 Apr 2011, 21:56

Hey all,

after long searching for solution to my problem I've desided to ask hier.
I tried to implement the autocomplete with pojo and i can get the value under the Input field.
the growl message says:Validation Error: Value is required as I klick submit button.

So I don't know what I made false.

Please help.

my XHTML:

Code: Select all

<h:form id="createFilmForm">
<h:panelGrid id="createFilmGrid" columns="3" rowClasses="vertTopPanel">
<h:outputLabel id="directorTest" value="Director:" /> 
						 <p:autoComplete value="#{filmBean.selectedDirector}"  
						                 completeMethod="#{filmBean.completeDirector}"  
						                 var="director" 
						                 itemLabel="#{director.surname}, #{director.name}"   
						                 itemValue="#{director}" 
						                 converter="directorConverter"/>  
						                 
						 <p:commandButton value="Submit" update="director messages" /> 
						 
						 <p:growl id="messages" showDetail="true"/>  
						       
						 <h:outputText id="director" value="Selected: #{filmBean.selectedDirector.name}" />  
</h:panelGrid>
</h:form>
						
My MngBean:

Code: Select all

	private Director director;
	private List<Director> directors;
	private Director selectedDirector=null;	
	
	public FilmadministrationMgdBean(){
		newfilm = new Film();
	}
	
	 public List<Director> completeDirector(String query) throws DirectorNotFoundException { 
		 LOGGER.info("Try to complete director" + query);
	         List<Director> suggestions = new ArrayList<Director>();  
	           
	         suggestions = filmSpring.findDirectorBySurnamePrefix(query);  
	           
	         return suggestions;  
	     }

	public Director getSelectedDirector() {
		return selectedDirector;
	}


	public void setSelectedDirector(Director selectedDirector) {
		this.selectedDirector = selectedDirector;
	}
My Converter:

Code: Select all

	public DirectorConverter() {
	}


	@Override
	public Object getAsObject(FacesContext arg0, UIComponent arg1, String directorString) {
			
		LOGGER.info( "Try to get as an object:"+directorString);
		
			String[]directorArray =  directorString.split(",");			
			LOGGER.info( "Try to get director by id:"+directorArray[0]);				
			Director director = new Director();
			director.setId(new Long(directorArray[0]));
			director.setSurname(directorArray[1]);
			director.setName(directorArray[2]);
			LOGGER.info( "result:"+director);	
			return director;
	}

	@Override
	public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
		LOGGER.info( "Try to get director as a String: " + arg2.toString());
     	 return arg2.toString();
	}
Thanks

Alexej

aliirawan
Posts: 26
Joined: 15 Nov 2010, 20:09
Location: Jakarta, Indonesia
Contact:

27 Apr 2011, 22:30

Mostly if you want to skip Validation phase you can add immediate="true" in your button.

Have you check that the Converter implementation is already done.
I have almost similar code and it works. Maybe you want to check and review your code.

Complete method

Code: Select all

public List<Task> complete(String query) {
		List<Task> results = new ArrayList<Task>();

		if (query != null) {
			List<Task> completeList = this.getTaskList();
			for (int i = 0; i < completeList.size(); i++) {
				Task c = completeList.get(i);
				if (c.getName().toLowerCase().indexOf(query.toLowerCase()) != -1) {
					results.add(completeList.get(i));
				} else if (c.getTags() != null) {
					String[] arr = c.getTags().split(",");
					for (String t : arr) {
						if (t.toLowerCase().indexOf(query.toLowerCase()) != -1) {
							results.add(completeList.get(i));
						}
					}
				}
			}
		}
		return results;
	}

Code: Select all

public class TaskConverter implements Converter {

	public Object getAsObject(FacesContext context, UIComponent component,
			String value) {
		// TODO Auto-generated method stub
		Task c = new Task();
		AutoComplete ac = (AutoComplete) component;

		// get RunBean

		RunBean runBean = (RunBean) context.getApplication().getELResolver()
				.getValue(context.getELContext(), null, "runBean");
		if (runBean != null) {
			List<Task> list = runBean.getTaskList();
			for (int i = 0; i < list.size(); i++) {
				if (list.get(i).getId().equals(value)) {
					c.setId(list.get(i).getId());
					c.setName(list.get(i).getName());
					c.setUrl(list.get(i).getUrl());
				}
			}
		}
		return c;
	}

	public String getAsString(FacesContext context, UIComponent component,
			Object value) {
		// TODO Auto-generated method stub
		return ((Task) value).getId();
	}

}
RunBean is my managedBean that hold List<Task>

Code: Select all

        public List<Task> getTaskList() {
		return taskList;
	}
the taskList is loaded from database or any other data source
I like to explore new things. There's a way for everything. I believe.

stellio
Posts: 10
Joined: 26 Apr 2011, 13:28

28 Apr 2011, 13:23

Thanks for the rash answer.

It works now. But I dont't know why.

Probably the reason was in the XHTML-file.

I changed director to selectedDirector so:

Code: Select all

 <h:outputLabel id="directorText" value="Director:" /> 
 <p:autoComplete 
		 id="directorInput"
		 value="#{filmBean.selectedDirector}"  
                 completeMethod="#{filmBean.completeDirector}"  
                 var="selectedDirector" 
                 itemLabel="#{selectedDirector.surname}, #{selectedDirector.name}"   
                 itemValue="#{selectedDirector}" 
                 converter="directorConverter"
                 selectListener="#{filmBean.handleSelectDirector}" 
                 onSelectUpdate="messages selectedDirector"/>                 				 
 <p:message for="directorInput" display="text" />   
					
 <h:outputLabel id="selectedDirectorText" value="Selected: " />
<h:outputText id="selectedDirector" value="#{filmBean.selectedDirector.name} #{filmBean.selectedDirector.surname}" />  

Post Reply

Return to “PrimeFaces”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 17 guests