Hello every one, I have a page that uses a panel (code ahead) that has a
form with an AJAX button, it works fine, but some times I have to click on
the Search button 2 times to make it work. I think it has to do with URLs or
something because when it happens it changes the url.
The code for the page that uses the following panel I don't include because
it only has a statement saying add(new SearchPanel(etc...
Here is the code, can some one help?
ps: If any other comments like, your code sucks, please also include them.
thanks a bunch
f(t)
and here is the code:
package ch.logismata.wicket.panels.ajax;
import ch.logismata.serverwrapper.DossierSearch;
import ch.logismata.serverwrapper.DossierSearchResult;
import ch.logismata.serverwrapper.DossierSearchResultList;
import ch.logismata.wicket.pages.NewDossier;
import ch.logismata.wicket.panels.BasePanel;
import java.io.Serializable;
import java.util.ArrayList;
import wicket.AttributeModifier;
import wicket.Component;
import wicket.PageParameters;
import wicket.ajax.AjaxRequestTarget;
import wicket.ajax.markup.html.form.AjaxSubmitButton;
import wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator;
import wicket.markup.html.WebMarkupContainer;
import wicket.markup.html.basic.Label;
import wicket.markup.html.form.Form;
import wicket.markup.html.form.TextField;
import wicket.markup.html.link.Link;
import wicket.markup.html.list.ListItem;
import wicket.markup.html.list.PageableListView;
import wicket.markup.html.panel.FeedbackPanel;
import wicket.model.AbstractReadOnlyModel;
import wicket.model.CompoundPropertyModel;
import wicket.model.Model;
import wicket.model.ResourceModel;
/**
* Panel to make a Dossier Search and display the results
*
* @author gm
*/
public class DossierSearchPanel extends BasePanel {
private SearchDossierModel m_cSearchDossierModel = new
SearchDossierModel();
private ArrayList<DossierSearchResult> m_cSearchResults = new
ArrayList<DossierSearchResult>();
public DossierSearchPanel(String id) {
//Call super base panel
super(id);
// create feedback panel to show errors
final FeedbackPanel feedback = new FeedbackPanel("searchFeedback");
//add feedback panel
feedback.setOutputMarkupId(true);
add(feedback);
// create form with markup id setter so it can be updated via ajax
Form form = new Form("dossierSearchForm", new
CompoundPropertyModel(m_cSearchDossierModel));
form.setOutputMarkupId(true);
form.add(new Label("legend", new ResourceModel("fields.legend
")));
form.add(new Label("nameLabel", new ResourceModel("fields.name
")));
//Construct TextFields
TextField cNameTextField = new TextField("name");
TextField cLastNameTextField = new TextField("lastName");
//add Fields to the form
form.add(cNameTextField);
form.add(new Label("lastNameLabel", new ResourceModel("
fields.lastName")));
form.add(cLastNameTextField);
///Add pageable table
final WebMarkupContainer datacontainer = new
WebMarkupContainer("data");
datacontainer.setOutputMarkupId(true);
add(datacontainer);
Model modelForList = new Model(){
public Object getObject(Component component){
return m_cSearchResults;
}
};
final PageableListView listview = new PageableListView("rows",
modelForList, 10) {
protected void populateItem(final ListItem item) {
final DossierSearchResult dossierSearchResult =
(DossierSearchResult)item.getModelObject();
item.add(new Link("goToDetail") {
public void onClick() {
setResponsePage(NewDossier.class, new
PageParameters("dossierId="+dossierSearchResult.getDossierObjectId()));
}
}.add(new Label("composedName",
dossierSearchResult.getComposedName())));
item.add(new Label("streetAddress",
dossierSearchResult.getStreetWithNumber()));
item.add(new AttributeModifier("class", true, new
AbstractReadOnlyModel() {
public Object getObject(Component component) {
return (item.getIndex() % 2 == 1) ? "even" : "odd";
}
}));
}
};
if(m_cSearchResults.size()==0){
}
listview.setOutputMarkupId(true);
datacontainer.add(listview);
datacontainer.add(new AjaxPagingNavigator("navigator", listview));
datacontainer.setVersioned(false);
// add a button that can be used to submit the form via ajax
form.add(new AjaxSubmitButton("searchButton", form) {
protected void onSubmit(AjaxRequestTarget target, Form form) {
// repaint the feedback panel so that it is hidden
searchDossiers(m_cSearchDossierModel.getName(),
m_cSearchDossierModel.getLastName());
if(m_cSearchResults.size()==0){
datacontainer.setVisible(false);
}else{
datacontainer.setVisible(true);
}
target.addComponent(feedback);
target.addComponent(datacontainer);
}
protected void onError(AjaxRequestTarget target, Form form) {
// repaint the feedback panel so errors are shown
target.addComponent(feedback);
}
});
//Add Form
add(form);
}
private void searchDossiers(String name, String lastName){
String message = null;
try{
if(m_cSearchResults==null){
m_cSearchResults = new ArrayList<DossierSearchResult>();
}
m_cSearchResults.clear();
DossierSearch cDossierSearch;
DossierSearchResultList cDossierSearchResultList;
cDossierSearch = new DossierSearch();
if(name==null){
name = "";
}
if(lastName==null){
lastName = "";
}
cDossierSearch.setFirstName(name);
cDossierSearch.setName(lastName);
cDossierSearchResultList = cDossierSearch.search();
message =
cDossierSearchResultList.size()>0?cDossierSearchResultList.size()+"
Dossiers found at search.":"No Dossiers found at search.";
info(message);
for(int iIterator=0;iIterator<cDossierSearchResultList.size
();iIterator++){
m_cSearchResults.add((DossierSearchResult)cDossierSearchResultList.getItem(iIterator));
}
/*
for(int iIterator=0;iIterator<100;iIterator++){
DossierSearchResultEntity cDossierResultEntity = new
DossierSearchResultEntity("DossierObjectId-"+iIterator,
"ComposedName-"+iIterator, "StreetWithNumber-"+iIterator,
"ZipWithLocation-"+iIterator, iIterator);
m_cSearchResults.add(cDossierResultEntity);
}*/
} catch(Exception xException){
message = "Error Occured at DossierSearchPanel.searchDossiers
().\n"+xException.toString();
error(message);
}
}
public boolean isVisible() {
return getWicketSession().isUserLoggedIn();
}
/** simple java bean. */
private static class SearchDossierModel implements Serializable {
private String name, lastName;
/**
* Gets lastName.
*
*
* @return lastName
*/
public String getLastName() {
return lastName;
}
/**
* Sets lastName.
*
*
* @param lastName
* lastName
*/
public void setLastName(String lastName) {
this.lastName = lastName;
}
/**
* Gets name.
*
* @return name
*/
public String getName() {
return name;
}
/**
* Sets name.
*
* @param name
* name
*/
public void setName(String name) {
this.name = name;
}
}
}
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user