I have a strange problem with LookupDispatchAction:
I built a form displaying several entries from a db as a list. There are
several buttons for editing/removing the entries an also two buttons for
paging though the list. The problem is, that only one of those buttons
works, while the other throws a MissingResourceAction. That sounds like
a typo, but the strange thing is, that it tries to lookup the button's
value rather than it's name (eg. having a ressource mapping like
mybutton.forward=go it would try to lookup "go"). All this works
perfectly well with my back-button on the same page, using the same action.
Any ideas?
Alexander
ApplicationRessources.properties:
# Form Labels
authors-form.button.create = Autor hinzufügen
authors-form.button.remove = Autor löschen
authors-form.button.edit = Autor bearbeiten
authors-form.button.list = Autoren auflisten
authors-form.button.forward = weiter
authors-form.button.back = zurück
list.jsp
<%@ page language="java"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic"
prefix="logic"%>
<logic:messagesPresent message="false">
<div class="error">
<html:messages id="msg" message="false">
<bean:write name="msg" filter="false"/>
</html:messages>
</div>
</logic:messagesPresent>
<logic:messagesPresent message="true">
<div class="status">
<html:messages id="msg" message="true">
<bean:write name="msg" filter="false"/>
</html:messages>
</div>
</logic:messagesPresent>
<div class="group">
<html:form action="/authors-list"><html:submit
property="submit"><bean:message
key="authors-form.button.create"/></html:submit></html:form>
<html:form action="/authors-list"><html:submit
property="submit"><bean:message
key="authors-form.button.back"/></html:submit></html:form>
<bean:write name="authorForm" property="strutsPage"/>
<html:form action="/authors-list"><html:submit
property="submit"><bean:message
key="authors-form.button.forward"/></html:submit></html:form>
</div>
<div class="group">
<table class="list">
<tr><th>Command</th><th>Author</th></tr>
<logic:iterate name="AUTHORS" id="author" indexId="author_id">
<tr><td><html:form action="/authors-list"><html:submit
property="submit"><bean:message
key="authors-form.button.edit"/></html:submit><html:submit
property="submit"><bean:message
key="authors-form.button.remove"/></html:submit><html:hidden
property="id" name="author"/></html:form></td><td><bean:write
name="author" property="name"/> - <bean:write name="author"
property="description"/></td></tr>
</logic:iterate>
</table>
</div>
<div class="group">
<html:form action="/authors-list"><html:submit
property="submit"><bean:message
key="authors-form.button.create"/></html:submit></html:form>
</div>
AuthorsActionList.java
package de.sbow.struts.action.Authors;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.logging.Log;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.LookupDispatchAction;
import de.sbow.MSys.Authors.value.AuthorBeanValue;
import de.sbow.common.ServiceLocator;
import de.sbow.struts.form.AuthorEditForm;
import de.sbow.struts.model.AuthorModel;
/**
* @author Alexander
*
* The Struts action-class for presenting
* the Authors list.
*
*/
public class AuthorsListAction extends LookupDispatchAction {
private static Log log = ServiceLocator.getInstance().getLog(
AuthorsListAction.class);
/**
* Key method for mapping methods to buttons
*/
protected Map getKeyMethodMap() {
Map map = new HashMap();
map.put("authors-form.button.create", "create");
map.put("authors-form.button.edit", "edit");
map.put("authors-form.button.remove", "remove");
map.put("authors-form.button.forwar", "forward");
map.put("authors-form.button.back", "back");
return map;
}
/**
* Method create
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward create(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
// get form
AuthorEditForm authorForm = (AuthorEditForm) form;
// TODO check if this makes sense!
authorForm.reset(mapping, request);
log.debug("Forwarding to \"authors create\".");
return mapping.findForward("create");
}
/**
* Method edit
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward edit(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
// get form
AuthorEditForm authorForm = (AuthorEditForm) form;
// get author-model
AuthorModel am = new AuthorModel();
// retieve author via model
AuthorBeanValue author = am.findById(authorForm.getId());
// copy author into form
BeanUtils.copyProperties(authorForm, author);
log.debug("Forwarding to \"authors edit\".");
return mapping.findForward("edit");
}
/**
* Method remove
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward remove(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
// get form
AuthorEditForm authorForm = (AuthorEditForm) form;
// get author-model
AuthorModel am = new AuthorModel();
// retieve author via model
AuthorBeanValue author = am.findById(authorForm.getId());
// copy author into form
BeanUtils.copyProperties(authorForm, author);
log.debug("Forwarding to \"authors remove\".");
return mapping.findForward("remove");
}
/**
* Method forward
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward forward(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
// get form
AuthorEditForm authorForm = (AuthorEditForm) form;
authorForm.setStrutsPage(authorForm.getStrutsPage() +1 );
log.debug("Forwarding to \"authors list\".");
return mapping.findForward("list");
}
/**
* Method back
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward back(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
// get form
AuthorEditForm authorForm = (AuthorEditForm) form;
authorForm.setStrutsPage(authorForm.getStrutsPage() -1 );
log.debug("Forwarding to \"authors list\".");
return mapping.findForward("list");
}
}
struts-config.xml
<action path="/authors-list"
name="authorForm"
input="msys.authors-list"
scope="request"
validate="false"
parameter="submit"
type="de.sbow.struts.action.Authors.AuthorsListAction">
<forward name="list" path="msys.authors-list"/>
<forward name="edit" path="msys.authors-edit" />
<forward name="create" path="msys.authors-create" />
<forward name="remove" path="msys.authors-remove" />
</action>
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org
|