You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by hu...@apache.org on 2006/03/21 14:21:49 UTC
svn commit: r387521 - in /struts/sandbox/trunk/action2/apps/mailreader/src:
java/ java/mailreader2/ webapp/pages/
Author: husted
Date: Tue Mar 21 05:21:47 2006
New Revision: 387521
URL: http://svn.apache.org/viewcvs?rev=387521&view=rev
Log:
Action2 Apps
* Mailreader - Work in progress
** Add classes missing from prior commits
** Add validation for Registration action
** Enable client-side validation
** Update to latest WW build to utilize new ww:reset tag
Added:
struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Logoff.java (with props)
struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/MainMenu.java (with props)
struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Registration-validation.xml (with props)
struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Registration.java (with props)
Modified:
struts/sandbox/trunk/action2/apps/mailreader/src/java/database.xml
struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/MailreaderSupport.java
struts/sandbox/trunk/action2/apps/mailreader/src/java/xwork.xml
struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Logon.jsp
struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/MainMenu.jsp
struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Registration.jsp
struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Welcome.jsp
Modified: struts/sandbox/trunk/action2/apps/mailreader/src/java/database.xml
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/java/database.xml?rev=387521&r1=387520&r2=387521&view=diff
==============================================================================
--- struts/sandbox/trunk/action2/apps/mailreader/src/java/database.xml (original)
+++ struts/sandbox/trunk/action2/apps/mailreader/src/java/database.xml Tue Mar 21 05:21:47 2006
@@ -10,3 +10,4 @@
</subscription>
</user>
</database>
+
\ No newline at end of file
Added: struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Logoff.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Logoff.java?rev=387521&view=auto
==============================================================================
--- struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Logoff.java (added)
+++ struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Logoff.java Tue Mar 21 05:21:47 2006
@@ -0,0 +1,11 @@
+package mailreader2;
+
+public class Logoff extends MailreaderSupport {
+
+ public String execute() {
+
+ setUser(null);
+
+ return SUCCESS;
+ }
+}
Propchange: struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Logoff.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/MailreaderSupport.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/MailreaderSupport.java?rev=387521&r1=387520&r2=387521&view=diff
==============================================================================
--- struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/MailreaderSupport.java (original)
+++ struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/MailreaderSupport.java Tue Mar 21 05:21:47 2006
@@ -101,7 +101,7 @@
public User findUser(String username, String password) throws ExpiredPasswordException {
// FIXME: Stupid hack to compensate for inadequate DAO layer
- if (username.equals("Hermes")) {
+ if ("Hermes".equals(username)) {
throw new ExpiredPasswordException("Hermes");
}
@@ -150,18 +150,25 @@
getSession().put(Constants.SUBSCRIPTION_KEY, subscription);
}
- // ---- Control methods ----
+ /**
+ * <p>The task input field.</p>
+ */
+ private String task = null;
+
/**
- * <p> Helper method to log event and cancel transaction. </p>
- *
- * @param method Method being processed
- * @param key Attrkibute to remove from session, if any
+ * @return Returns the task.
*/
- protected void doCancel(String method, String key) {
- if (key != null) {
- getSession().remove(key);
- }
+ public String getTask() {
+ return this.task;
}
+
+ /**
+ * @param task The task to set.
+ */
+ public void setTask(String task) {
+ this.task = task;
+ }
+
}
Added: struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/MainMenu.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/MainMenu.java?rev=387521&view=auto
==============================================================================
--- struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/MainMenu.java (added)
+++ struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/MainMenu.java Tue Mar 21 05:21:47 2006
@@ -0,0 +1,4 @@
+package mailreader2;
+
+public class MainMenu extends MailreaderSupport {
+}
Propchange: struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/MainMenu.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Registration-validation.xml
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Registration-validation.xml?rev=387521&view=auto
==============================================================================
--- struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Registration-validation.xml (added)
+++ struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Registration-validation.xml Tue Mar 21 05:21:47 2006
@@ -0,0 +1,55 @@
+<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
+
+<validators>
+
+ <field name="username">
+ <field-validator type="requiredstring">
+ <message key="error.username.required"/>
+ </field-validator>
+ </field>
+
+ <field name="password">
+ <field-validator type="requiredstring">
+ <message key="error.password.required"/>
+ </field-validator>
+ <field-validator type="stringlength">
+ <param name="trim">true</param>
+ <param name="minLength">5</param>
+ <param name="maxLength">10</param>
+ <message key="errors.range"/>
+ </field-validator>
+ </field>
+
+ <field name="password2">
+ <field-validator type="requiredstring">
+ <message key="error.password2.required"/>
+ </field-validator>
+ </field>
+
+ <field name="fullname">
+ <field-validator type="requiredstring">
+ <message key="error.fullName.required"/>
+ </field-validator>
+ </field>
+
+ <field name="fromaddress">
+ <field-validator type="requiredstring">
+ <message key="error.fromAddress.required"/>
+ </field-validator>
+ <field-validator type="email">
+ <message key="errors.email"/>
+ </field-validator>
+ </field>
+
+ <field name="replytoaddress">
+ <field-validator type="email">
+ <message key="errors.email"/>
+ </field-validator>
+ </field>
+
+ <validator type="expression">
+ <param name="expression">password eq password2</param>
+ <message key="error.password.match"/>
+ </validator>
+
+</validators>
Propchange: struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Registration-validation.xml
------------------------------------------------------------------------------
svn:eol-style = native
Added: struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Registration.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Registration.java?rev=387521&view=auto
==============================================================================
--- struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Registration.java (added)
+++ struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Registration.java Tue Mar 21 05:21:47 2006
@@ -0,0 +1,145 @@
+package mailreader2;
+
+import com.opensymphony.util.BeanUtils;
+import org.apache.struts.apps.mailreader.dao.ExpiredPasswordException;
+import org.apache.struts.apps.mailreader.dao.User;
+import org.apache.struts.apps.mailreader.dao.UserDatabase;
+import org.apache.struts.apps.mailreader.dao.impl.memory.MemoryUser;
+
+
+/**
+ * <p> Provide an Edit method for retrieving an existing user, and a Save method for updating or inserting a user.
+ * </p><p> Both methods utilize a RegistrationForm to obtain or expose User details. If Save is used to create a user,
+ * additional validations ensure input is nominal. When a user is created, Save also handles the initial logon. </p>
+ */
+public final class Registration extends MailreaderSupport {
+
+ /**
+ * <p>The confirmation password input field.</p>
+ */
+ private String password2 = null;
+
+
+ /**
+ * @return Returns the confirmationpassword.
+ */
+ public String getPassword2() {
+ return this.password2;
+ }
+
+ /**
+ * @param password2 The confirmation password to set.
+ */
+ public void setPassword2(String password2) {
+ this.password2 = password2;
+ }
+
+
+ /**
+ * <p>The username input field.</p>
+ */
+ private String username = null;
+
+
+ /**
+ * @return Returns the username.
+ */
+ public String getUsername() {
+ return this.username;
+ }
+
+ /**
+ * @param username The username to set.
+ */
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ // ---- Private Methods ----
+
+ /**
+ * <p> Verify input for creating a new user, create the user, and process the login. </p>
+ *
+ * @return A new User and empty Errors if create succeeds, or null and Errors if create fails
+ */
+ private User createUser(String username, String password) {
+
+ UserDatabase database = getDatabase();
+ User user;
+
+ try {
+
+ user = findUser(username, password);
+ }
+
+ catch (ExpiredPasswordException e) {
+ user = getUser(); // Just so that it is not null
+ }
+
+ if (user != null) {
+ this.addFieldError("username", "error.username.unique");
+ return null;
+ }
+
+ return database.createUser(username);
+ }
+
+ // ----- Public Methods ----
+
+
+ private boolean isCreating() {
+ User user = getUser();
+ if (null == user) {
+ return true;
+ }
+ return (null == user.getDatabase());
+ }
+
+ /**
+ * <p> Retrieve the User object to edit or null if the User does not exist, and set an transactional token to later
+ * detect multiple Save commands. </p>
+ *
+ * @return The "Success" result for this mapping
+ * @throws Exception on any error
+ */
+ public String input() throws Exception {
+
+ if (isCreating()) {
+ User user = new MemoryUser(null, null);
+ setUser(user);
+ setTask(Constants.CREATE);
+ } else {
+ setTask(Constants.EDIT);
+ }
+
+ return INPUT;
+ }
+
+ /**
+ * <p> Insert or update a User object to the persistent store. </p><p> If a User is not logged in, then a new User
+ * is created and automatically logged in. Otherwise, the existing User is updated. </p>
+ *
+ * @return The "Success" result for this mapping
+ * @throws Exception on any error
+ */
+ public String execute()
+ throws Exception {
+
+ boolean editing = Constants.EDIT.equals(getTask());
+ // Double check for user and database
+ editing = editing && (null != getUser()) && (null != getUser().getDatabase());
+
+ User user;
+ if (!editing) {
+ User input = getUser();
+ // Since user.username is immutable, we have to use a local property
+ user = createUser(getUsername(), input.getPassword());
+ BeanUtils.setValues(user, input, null);
+ }
+
+ saveUser();
+
+ return SUCCESS;
+ }
+
+}
Propchange: struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Registration.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: struts/sandbox/trunk/action2/apps/mailreader/src/java/xwork.xml
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/java/xwork.xml?rev=387521&r1=387520&r2=387521&view=diff
==============================================================================
--- struts/sandbox/trunk/action2/apps/mailreader/src/java/xwork.xml (original)
+++ struts/sandbox/trunk/action2/apps/mailreader/src/java/xwork.xml Tue Mar 21 05:21:47 2006
@@ -25,15 +25,17 @@
<result>/pages/ChangePassword.jsp</result>
</action>
- <action name="MainMenu">
+ <action name="MainMenu" class="mailreader2.MainMenu">
<result>/pages/MainMenu.jsp</result>
+ <result name="input">/pages/MainMenu.jsp</result>
</action>
- <action name="Registration">
- <result name="edit">/pages/Registration.jsp</result>
+ <action name="Registration" class="mailreader2.Registration">
+ <result name="input">/pages/Registration.jsp</result>
+ <result type="chain">MainMenu</result>
</action>
- <action name="Logoff">
+ <action name="Logoff" class="mailreader2.Logoff">
<result type="chain">Welcome</result>
</action>
Modified: struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Logon.jsp
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Logon.jsp?rev=387521&r1=387520&r2=387521&view=diff
==============================================================================
--- struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Logon.jsp (original)
+++ struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Logon.jsp Tue Mar 21 05:21:47 2006
@@ -9,12 +9,16 @@
<body>
-<ww:form method="POST">
+<ww:form method="POST" validate="true">
<ww:textfield label="%{getText('prompt.username')}" name="username"/>
<ww:textfield label="%{getText('prompt.password')}" name="password"/>
<ww:submit/>
+
+ <ww:reset/>
+
+ <ww:submit action="Welcome" value="%{getText('button.cancel')}" onclick="form.onsubmit=null"/>
</ww:form>
<jsp:include page="Footer.jsp"/>
Modified: struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/MainMenu.jsp
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/MainMenu.jsp?rev=387521&r1=387520&r2=387521&view=diff
==============================================================================
--- struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/MainMenu.jsp (original)
+++ struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/MainMenu.jsp Tue Mar 21 05:21:47 2006
@@ -10,7 +10,7 @@
<body>
<h3><ww:text name="mainMenu.heading"/> <ww:property value="user.fullName"/></h3>
<ul>
- <li><a href="<ww:url action="Registration!edit" />">
+ <li><a href="<ww:url action="Registration!input" />">
<ww:text name="mainMenu.registration"/>
</a>
</li>
Modified: struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Registration.jsp
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Registration.jsp?rev=387521&r1=387520&r2=387521&view=diff
==============================================================================
--- struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Registration.jsp (original)
+++ struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Registration.jsp Tue Mar 21 05:21:47 2006
@@ -1,6 +1,46 @@
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<html>
-<head><title>Simple jsp page</title></head>
+<%@ taglib uri="/webwork" prefix="ww" %>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head><ww:if test="task=='Create'">
+ <title><ww:text name="registration.title.create"/></title>
+</ww:if>
+ <ww:if test="task=='Edit'">
+ <title><ww:text name="registration.title.edit"/></title>
+ </ww:if>
+</head>
-<body>Place your content here</body>
-</html>
\ No newline at end of file
+<body>
+
+<ww:form method="POST" validate="true">
+ <ww:hidden name="task"/>
+ <ww:if test="task == 'Create'">
+ <ww:textfield label="%{getText('prompt.username')}" name="username"/>
+ </ww:if>
+ <ww:else>
+ <ww:label label="%{getText('prompt.username')}" name="username"/>
+ <ww:hidden name="username"/>
+ </ww:else>
+
+ <ww:textfield label="%{getText('prompt.password')}" name="password"/>
+
+ <ww:textfield label="%{getText('prompt.password2')}" name="password2"/>
+
+ <ww:textfield label="%{getText('prompt.fullName')}" name="fullName"/>
+
+ <ww:textfield label="%{getText('prompt.fromAddress')}" name="fromAddress"/>
+
+ <ww:textfield label="%{getText('prompt.replyToAddress')}" name="replyToAddress"/>
+
+ <ww:submit/>
+
+ <ww:reset/>
+
+ <ww:submit action="Welcome" value="%{getText('button.cancel')}" onclick="form.onsubmit=null"/>
+
+</ww:form>
+
+<jsp:include page="Footer.jsp"/>
+
+</body>
+</html>
Modified: struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Welcome.jsp
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Welcome.jsp?rev=387521&r1=387520&r2=387521&view=diff
==============================================================================
--- struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Welcome.jsp (original)
+++ struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Welcome.jsp Tue Mar 21 05:21:47 2006
@@ -12,7 +12,7 @@
<h3><ww:text name="index.heading"/></h3>
<ul>
- <li><a href="<ww:url action="Registration!edit"/>"><ww:text name="index.registration"/></a></li>
+ <li><a href="<ww:url action="Registration!input"/>"><ww:text name="index.registration"/></a></li>
<li><a href="<ww:url action="Logon!input"/>"><ww:text name="index.logon"/></a></li>
</ul>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org