Thanks Rick. Let me find out what DispatchAction is and then come back.
--- Rick Reumann <[EMAIL PROTECTED]> 內容: > HI, Ping, you have so many different things going on > in one action > execute method that it is very difficult to follow > everything. Also, you > are doing a lot of things that do not need to be > done (usually) from > your action such as calling form.reset(), removing > form bean, removing > mappings, etc. You are doing way too many different > things in one Action > ... you either need to A) Use a DispatchAction or > B) create different > Action classes to perform the different tasks. > > Once you do that, the first action dispatch method > you go to before > hitting your form you do > > saveToken(request); > > Then in the action method that you want to make sure > duplicate submits > don't occur you do your check...: > > isTokenValid(request)) > > Then when I leave that method (if it was valid > token) I do... > > resetToken(request); > saveToken(request); > > > So, if I were you, I'd simply create a > DispatchAction with the methods... > > > setUp(.. ) > > updateUserProfile(.. ) > > cancel(... ) > > > > > > Ping Cheung Leung wrote: > > > My attention is to prevent duplicated submission. > > I have refered to the struts-example. > > It checks the valid of token by IsValidToken(). > > However when a form is displayed at the first > time, > > it always is invalid. > > > > Moreover, according to the struts-example, it > > saveToken when it finds error. > > > > The behavior becomes very strange. > > > > When a form is displayed at the first time, it is > > invalid. It leads to error message displaying on > web > > page. Next time user clicks the submit button, it > > becomes valid. Then it cannot avoid duplicated > > submission. > > > > All I want is very simple. When user clicks a > submit > > button. It saves record if data checking is ok. > > If user goes back and re-click the submit button. > > Duplicated submission should be detected. > > > > Below is my codings. What needs to be changed > > so that duplicated submission can be avoided? > > > > package com.erp.quotation; > > > > import java.util.Locale; > > import org.apache.struts.action.*; > > import javax.servlet.http.*; > > import org.apache.commons.logging.Log; > > import org.apache.commons.logging.LogFactory; > > import org.apache.struts.util.MessageResources; > > > > public final class AddUserProfileAction extends > Action > > { > > > > private Log log = > > > LogFactory.getFactory().getInstance(this.getClass().getName()); > > > > > > public ActionForward execute (ActionMapping > mapping, > > ActionForm form, > > HttpServletRequest request, > > HttpServletResponse response) > > throws Exception { > > > > if (isCancelled(request)) { > > if (log.isInfoEnabled()) { > > log.info(" " + mapping.getAttribute() > + " > > - Registration transaction was cancelled"); > > } > > removeFormBean(mapping, request); > > return mapping.findForward("cancel"); > > } > > > > HttpSession session = request.getSession(); > > ActionErrors errors = new ActionErrors(); > > if (log.isTraceEnabled()) { > > log.trace(" Checking transactional > control > > token"); > > } > > if (!isTokenValid(request)) { > > log.trace("valid token"); > > errors.add(ActionErrors.GLOBAL_ERROR, > > new > > ActionError("error.transaction.token")); > > } else { > > log.trace("invalid token"); > > } > > resetToken(request); > > > > Locale locale = getLocale(request); > > MessageResources messages = > > getResources(request); > > String action = > request.getParameter("action"); > > > > if (checking_is_ok) { > > save_record_to_database(); > > ActionMessages actionMessages = new > > ActionMessages(); > > ActionMessage actionMessage = new > > ActionMessage("statusLine.recordAdded"); > > actionMessages.add(Constants.statusLine, > > actionMessage); > > saveMessages (request, actionMessages); > > saveToken(request); > > addUserProfileForm.reset(mapping, > request); > > return mapping.findForward("success"); > > > } > > // Remove the obsolete form bean > > if (mapping.getAttribute() != null) { > > if ("request".equals(mapping.getScope())) > > > > request.removeAttribute(mapping.getAttribute()); > > else > > > > session.removeAttribute(mapping.getAttribute()); > > } > > if (!errors.isEmpty()) { > > saveErrors(request, errors); > > saveToken(request); > > return (mapping.getInputForward()); > > } > > return mapping.findForward("failure"); > > } > > > > } > > > > > _________________________________________________________ > > 必殺技、飲歌、小星星... > > 浪漫鈴聲 情心連繫 > > > http://us.rd.yahoo.com/evt=22281/*http://ringtone.yahoo.com.hk/ > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: > [EMAIL PROTECTED] > > For additional commands, e-mail: > [EMAIL PROTECTED] > > > > > -- > Rick > > --------------------------------------------------------------------- > To unsubscribe, e-mail: > [EMAIL PROTECTED] > For additional commands, e-mail: > [EMAIL PROTECTED] > > _________________________________________________________ 必殺技、飲歌、小星星... 浪漫鈴聲 情心連繫 http://us.rd.yahoo.com/evt=22281/*http://ringtone.yahoo.com.hk/ --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]