You could just download the token's source code and use only the component
without the other features of shale-core
2006/12/18, [EMAIL PROTECTED] <[EMAIL PROTECTED]>:
Hi All,
I had posted a similar query earlier to prevent double click of a form
button.
I could use Shale's <s:token> but i ran into compatibility issues between
RAD6.0.1 and Shale-core.jar1.0.3.
So i had to give it up and try another approach using Synchronizer Token
pattern as in sytuts.
Please help me fine tune it.Please go ahead to provide me any other
elegant approach.
I want to call the method generateSaveToken() from phaseListener.
Is it possible.????
*Jsp Page*
<
h:form>
<h:inputText id="text1"/>
<h:inputHidden value="#{visit.saveToken}" />
<h:commandButton value="Submit" id="button1" action="#{
reqBean.actionMethod}" />
</h:form>
*FacesConfig.xml*
<
managed-bean>
<description>Session bean that holds data and delegates needed by request
beans.</description>
<managed-bean-name>visit</managed-bean-name>
<managed-bean-class>com.acs.click.Visit</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<description>Some request bean.</description>
<managed-bean-name>reqBean</managed-bean-name>
<managed-bean-class>com.acs.click.RequestBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>visit</property-name>
<value>#{sessionScope.visit}</value>
</managed-property>
</managed-bean>
*Visit.java*
public class Visit extends BaseBean {
private long activeToken;
private long receivedToken;
public long getSaveToken() {
return this.activeToken;
}
public void setSaveToken(long aToken) {
this.receivedToken = aToken;
}
public long getActiveToken() {
return activeToken;
}
public void setActiveToken(long activeToken) {
this.activeToken = activeToken;
}
public long getReceivedToken() {
return receivedToken;
}
public void setReceivedToken(long receivedToken) {
this.receivedToken = receivedToken;
}
boolean tokensMatch() {
return (this.activeToken == this.receivedToken);
}
}
*RequestBean.java*
public class RequestBean extends BaseBean {
public String actionMethod() {
// prevent identical requests from being processed
String normalOutcome = "Google-NOT-OK";
if (this.saveTokenIsInValid() )
return this.logInvalidSaveAndReturn(normalOutcome);
this.expireSaveToken();
System.out.println("save token is valid. attempting to
save....");
try {
// invoke some business logic here
} catch (Exception exc) {
this.generateSaveToken();
return null;
}
this.generateSaveToken();
return "success";
}
*BaseBean.java*
public class BaseBean {
protected void generateSaveToken() {
System.out.println("generateSaveToken()");
Random random = new Random();
long token = random.nextLong();
while (token == 0) {
token = random.nextLong();
}
System.out.println("Save token generated =>"+ token);
this.getVisit().setActiveToken(token);
this.getVisit().setReceivedToken(0);
}
protected boolean saveTokenIsInValid() {
System.out.println("saveTokenIsValid():\n active token: " +
this.getVisit().getActiveToken() + "\n recv'd token: " +
this.getVisit().getReceivedToken()
);
boolean isValid = this.getVisit().tokensMatch();
return !isValid;
}
protected void expireSaveToken() {
System.out.println("expireSaveToken()");
this.getVisit().setActiveToken(0);
}
protected String logInvalidSaveAndReturn(String outcome) {
System.out.println("User submitted a save request that was not " +
"processed because the save token was not valid. Returning
outcome: '" + outcome + "'.");
return outcome;
}
// Used by JSF managed bean creation facility
public Visit getVisit() {
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext
().getSession(false);
Visit visit = (Visit) session.getAttribute("visit");
return visit;
}
// Used by JSF managed bean creation facility
public void setVisit(Visit visit) {
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext
().getSession(false);
session.setAttribute("visit",visit);
}
}
Best Regards,
Pallavi
The information contained in this electronic message and any attachments
to this message are intended for the exclusive use of the addressee(s) and
may contain proprietary, confidential or privileged information. If you are
not the intended recipient, you should not disseminate, distribute or copy
this e-mail. Please notify the sender immediately and destroy all copies of
this message and any attachments.
WARNING: Computer viruses can be transmitted via email. The recipient
should check this email and any attachments for the presence of viruses. The
company accepts no liability for any damage caused by any virus transmitted
by this email.
www.wipro.com