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/20 02:59:58 UTC
svn commit: r387104 - in /struts/sandbox/trunk/action2/apps:
cookbook/src/java/cookbook2/ mailreader/src/java/
mailreader/src/java/mailreader2/ mailreader/src/webapp/WEB-INF/
mailreader/src/webapp/pages/
Author: husted
Date: Sun Mar 19 17:59:56 2006
New Revision: 387104
URL: http://svn.apache.org/viewcvs?rev=387104&view=rev
Log:
Action2 Apps
* Mailreader - Work in progress
** Refactor for "model driven" interface
** Add listener to load database
** Working against WW 2.2.2 RC1 now
Added:
struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/ApplicationListener.java (with props)
struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Logon-validation.xml
- copied, changed from r387103, struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Logon-validation
Removed:
struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Logon-validation
Modified:
struts/sandbox/trunk/action2/apps/cookbook/src/java/cookbook2/Simple.java
struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Logon.java
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/WEB-INF/web.xml
struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/ChangePassword.jsp
struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/Logon.jsp
struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/MainMenu.jsp
Modified: struts/sandbox/trunk/action2/apps/cookbook/src/java/cookbook2/Simple.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/cookbook/src/java/cookbook2/Simple.java?rev=387104&r1=387103&r2=387104&view=diff
==============================================================================
--- struts/sandbox/trunk/action2/apps/cookbook/src/java/cookbook2/Simple.java (original)
+++ struts/sandbox/trunk/action2/apps/cookbook/src/java/cookbook2/Simple.java Sun Mar 19 17:59:56 2006
@@ -13,5 +13,15 @@
public String getName() {
return this.name;
}
-
+
+
+ public String execute() {
+
+ if (this.hasErrors()) {
+ return INPUT;
+ }
+
+ return SUCCESS;
+ }
+
}
Added: struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/ApplicationListener.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/ApplicationListener.java?rev=387104&view=auto
==============================================================================
--- struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/ApplicationListener.java (added)
+++ struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/ApplicationListener.java Sun Mar 19 17:59:56 2006
@@ -0,0 +1,237 @@
+/*
+ * Copyright 1999-2002,2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Id: ApplicationListener.java 372087 2006-01-25 03:38:42Z craigmcc $
+ */
+
+package mailreader2;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.apache.struts.apps.mailreader.dao.impl.memory.MemoryUserDatabase;
+
+/**
+ * <p><code>ServletContextListener</code> that initializes and finalizes the
+ * persistent storage of User and Subscription information for the Struts
+ * Demonstration Application, using an in-memory database backed by an
+ * XML file.</p>
+ *
+ * <p><strong>IMPLEMENTATION WARNING</strong> - If this web application is run
+ * from a WAR file, or in another environment where reading and writing of the
+ * web application resource is impossible, the initial contents will be copied
+ * to a file in the web application temporary directory provided by the
+ * container. This is for demonstration purposes only - you should
+ * <strong>NOT</strong> assume that files written here will survive a restart
+ * of your servlet container.</p>
+ *
+ * <p>This class was borrowed from the Shale Mailreader. Changes were:</p>
+ *
+ * <ul>
+ *
+ * <li>Path to database.xml (under classes here). </li>
+ *
+ * <li>Class to store protocol list (an array here). </li>
+ *
+ * </ul>
+ */
+
+public final class ApplicationListener implements ServletContextListener {
+
+
+ // ------------------------------------------------------ Manifest Constants
+
+
+ /**
+ * <p>Appication scope attribute key under which the in-memory
+ * version of our database is stored.</p>
+ */
+ public static final String DATABASE_KEY = "database";
+
+
+ /**
+ * <p>Application scope attribute key under which the valid
+ * selection items for the protocol property is stored.</p>
+ */
+ public static final String PROTOCOLS_KEY = "protocols";
+
+
+ // ------------------------------------------------------ Instance Variables
+
+
+ /**
+ * <p>The <code>ServletContext</code> for this web application.</p>
+ */
+ private ServletContext context = null;
+
+
+ /**
+ * The {@link MemoryUserDatabase} object we construct and make available.
+ */
+ private MemoryUserDatabase database = null;
+
+
+ /**
+ * Logging output for this plug in instance.
+ */
+ private Log log = LogFactory.getLog(this.getClass());
+
+
+ // ------------------------------------------------------------- Properties
+
+
+ /**
+ * The web application resource path of our persistent database
+ * storage file.
+ */
+ private String pathname = "/WEB-INF/classes/database.xml";
+
+ public String getPathname() {
+ return (this.pathname);
+ }
+
+ public void setPathname(String pathname) {
+ this.pathname = pathname;
+ }
+
+
+ // ------------------------------------------ ServletContextListener Methods
+
+
+ /**
+ * <p>Gracefully shut down this database, releasing any resources
+ * that were allocated at initialization.</p>
+ *
+ * @param event ServletContextEvent to process
+ */
+ public void contextDestroyed(ServletContextEvent event) {
+
+ log.info("Finalizing memory database plug in");
+
+ if (database != null) {
+ try {
+ database.close();
+ } catch (Exception e) {
+ log.error("Closing memory database", e);
+ }
+ }
+
+ context.removeAttribute(DATABASE_KEY);
+ context.removeAttribute(PROTOCOLS_KEY);
+ database = null;
+ context = null;
+
+ }
+
+
+ /**
+ * <p>Initialize and load our initial database from persistent storage.</p>
+ *
+ * @param event The context initialization event
+ *
+ */
+ public void contextInitialized(ServletContextEvent event) {
+
+ log.info("Initializing memory database plug in from '" +
+ pathname + "'");
+
+ // Remember our associated ServletContext
+ this.context = event.getServletContext();
+
+ // Construct a new database and make it available
+ database = new MemoryUserDatabase();
+ try {
+ String path = calculatePath();
+ if (log.isDebugEnabled()) {
+ log.debug(" Loading database from '" + path + "'");
+ }
+ database.setPathname(path);
+ database.open();
+ } catch (Exception e) {
+ log.error("Opening memory database", e);
+ throw new IllegalStateException("Cannot load database from '" +
+ pathname + "': " + e);
+ }
+ context.setAttribute(DATABASE_KEY, database);
+
+ // Cache the selection items for protocols
+ String[][] protocols = new String[][]{
+ {"imap", "IMAP Protocol"},
+ {"pop3", "POP3 Protocol"}
+ };
+
+ context.setAttribute(PROTOCOLS_KEY, protocols);
+
+ }
+
+
+ // -------------------------------------------------------- Private Methods
+
+
+ /**
+ * Calculate and return an absolute pathname to the XML file to contain
+ * our persistent storage information.
+ *
+ * @exception Exception if an input/output error occurs
+ */
+ private String calculatePath() throws Exception {
+
+ // Can we access the database via file I/O?
+ String path = context.getRealPath(pathname);
+ if (path != null) {
+ return (path);
+ }
+
+ // Does a copy of this file already exist in our temporary directory
+ File dir = (File)
+ context.getAttribute("javax.servlet.context.tempdir");
+ File file = new File(dir, "struts-example-database.xml");
+ if (file.exists()) {
+ return (file.getAbsolutePath());
+ }
+
+ // Copy the static resource to a temporary file and return its path
+ InputStream is =
+ context.getResourceAsStream(pathname);
+ BufferedInputStream bis = new BufferedInputStream(is, 1024);
+ FileOutputStream os =
+ new FileOutputStream(file);
+ BufferedOutputStream bos = new BufferedOutputStream(os, 1024);
+ byte buffer[] = new byte[1024];
+ while (true) {
+ int n = bis.read(buffer);
+ if (n <= 0) {
+ break;
+ }
+ bos.write(buffer, 0, n);
+ }
+ bos.close();
+ bis.close();
+ return (file.getAbsolutePath());
+
+ }
+
+
+}
Propchange: struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/ApplicationListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Logon-validation.xml (from r387103, struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Logon-validation)
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Logon-validation.xml?p2=struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Logon-validation.xml&p1=struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Logon-validation&r1=387103&r2=387104&rev=387104&view=diff
==============================================================================
--- struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Logon-validation (original)
+++ struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Logon-validation.xml Sun Mar 19 17:59:56 2006
@@ -3,12 +3,12 @@
<validators>
<field name="username">
<field-validator type="requiredstring">
- <message>You must enter a username</message>
+ <message key="error.username.required"/>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
- <message>You must enter a password</message>
+ <message key="error.password.required" />
</field-validator>
</field>
</validators>
Modified: struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Logon.java
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Logon.java?rev=387104&r1=387103&r2=387104&view=diff
==============================================================================
--- struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Logon.java (original)
+++ struts/sandbox/trunk/action2/apps/mailreader/src/java/mailreader2/Logon.java Sun Mar 19 17:59:56 2006
@@ -18,6 +18,8 @@
package mailreader2;
import org.apache.struts.apps.mailreader.dao.User;
+import org.apache.struts.apps.mailreader.dao.ExpiredPasswordException;
+
/**
* <p>
* Validate a user logon.
@@ -76,21 +78,15 @@
* has disappeared, post error messages and forward to input.
* </p>
*
- * @throws Exception if the application business logic throws
- * an exception
*/
- public String execute() throws Exception {
+ public String execute() throws ExpiredPasswordException {
- // Retrieve user
- User user = doGetUser(username, password);
+ User user = findUser(getUsername(),getPassword());
- // Report back any errors, and exit if any
- // FIXME: if (!errors.isEmpty()) { this.saveErrors(request, errors); return (mapping.getInputForward());
+ if (user!=null) setUser(user);
- // Cache user object in session to signify logon
- doCacheUser(user);
+ if (this.hasErrors()) return INPUT;
- // Done
return SUCCESS;
}
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=387104&r1=387103&r2=387104&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 Sun Mar 19 17:59:56 2006
@@ -18,13 +18,13 @@
package mailreader2;
-import javax.servlet.ServletException;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.opensymphony.xwork.ActionSupport;
+import com.opensymphony.xwork.ModelDriven;
import com.opensymphony.webwork.interceptor.SessionAware;
+import com.opensymphony.webwork.interceptor.ApplicationAware;
import org.apache.struts.apps.mailreader.dao.User;
import org.apache.struts.apps.mailreader.dao.Subscription;
import org.apache.struts.apps.mailreader.dao.ExpiredPasswordException;
@@ -45,7 +45,19 @@
*
* @version $Rev: 360442 $ $Date: 2005-12-31 15:10:04 -0500 (Sat, 31 Dec 2005) $
*/
-public abstract class MailreaderSupport extends ActionSupport implements SessionAware {
+public abstract class MailreaderSupport extends ActionSupport implements ModelDriven, SessionAware, ApplicationAware {
+
+ // ---- ApplicationAware ----
+
+ private Map application;
+
+ public void setApplication(Map application) {
+ this.application = application;
+ }
+
+ public Map getApplication() {
+ return this.application;
+ }
// ---- SessionAware ----
@@ -59,175 +71,114 @@
return session;
}
- // ---- Fields ----
-
- /**
- * <p>
- * Name of username field ["username"].
- * </p>
- */
- public static String USERNAME = "username";
-
- /**
- * <p>
- * Name of password field ["password"].
- * </p>
- */
- public static String PASSWORD = "password";
+ // ---- ModelDriven ----
- /**
- * <p>
- * Name of task field ["task"].
- * </p>
- */
- public final static String TASK = "task";
+ public Object getModel () {
+ return getSession().get(Constants.USER_KEY);
+ }
- // ---- Protected Methods ----
+ // ---- Database property ----
/**
* <p>
- * Store User object in client session.
- * If user object is null, any existing user object is removed.
+ * Return a reference to the UserDatabase
+ * or null if the database is not available.
* </p>
*
- * @param user The user object returned from the database
+ * @return a reference to the UserDatabase or null if the database is not
+ * available
*/
- void doCacheUser(User user) {
- getSession().put(Constants.USER_KEY, user);
+ protected UserDatabase getDatabase() {
+ Object db = getApplication().get(Constants.DATABASE_KEY);
+ if (db==null)
+ this.addActionError("error.database.missing");
+ return (UserDatabase) db;
}
- /**
- * <p>
- * Helper method to log event and cancel transaction.
- * </p>
- *
- * @param method Method being processed
- * @param key Attrkibute to remove from session, if any
- */
- protected void doCancel(String method, String key) {
- if (key != null) {
- getSession().remove(key);
- }
+ protected void setDatabase(UserDatabase database) {
+ getApplication().put(Constants.DATABASE_KEY,database);
}
- /**
- * <p>
- * Obtain the cached Subscription object, if any.
- * </p>
- *
- * @return Cached Subscription object or null
- */
- protected Subscription doGetSubscription() {
- return (Subscription) getSession().get(Constants.SUBSCRIPTION_KEY);
+ // ---- User property ----
+
+ public User getUser() {
+ return (User) getModel();
}
- /**
- * <p>
- * Confirm user credentials. Post any errors and return User object
- * (or null).
- * </p>
- *
- * @param database Database in which to look up the user
- * @param username Username specified on the logon form
- * @param password Password specified on the logon form
- * @return Validated User object or null
- * @throws org.apache.struts.apps.mailreader.dao.ExpiredPasswordException
- * to be handled by Struts exception
- * processor via the action-mapping
- */
- User doGetUser(UserDatabase database, String username,
- String password)
- throws ExpiredPasswordException {
-
- User user = null;
- if (database == null) {
- // FIXME: errors.add( ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.database.missing"));
- } else {
-
- if (username.equals("Hermes")) {
- throw new ExpiredPasswordException("Hermes");
- }
-
- user = database.findUser(username);
- if ((user != null) && !user.getPassword().equals(password)) {
- user = null;
- }
- if (user == null) {
- // FIXME: errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.password.mismatch"));
- }
- }
+ public void setUser(User user) {
+ getSession().put(Constants.USER_KEY,user);
+ }
+ public User findUser(String username, String password) throws ExpiredPasswordException
+ {
+ // FIXME: Stupid hack to compensate for inadequate DAO layer
+ if (username.equals("Hermes"))
+ throw new ExpiredPasswordException("Hermes");
+
+ User user = getDatabase().findUser(username);
+ if ((user != null) && !user.getPassword().equals(password)) {
+ user = null;
+ }
+ if (user == null) {
+ this.addFieldError("password","error.password.mismatch");
+ }
return user;
}
/**
* <p>
- * Confirm user credentials. Post any errors and return User object
- * (or null).
+ * The <code>Log</code> instance for this application.
* </p>
- *
- * @param username Username specified on the logon form
- * @param password Password specified on the logon form
- * @return Validated User object or null
- * @throws org.apache.struts.apps.mailreader.dao.ExpiredPasswordException
- * to be handled by Struts exception
- * processor via the action-mapping
*/
- User doGetUser(String username,
- String password)
- throws ExpiredPasswordException {
-
- return doGetUser(doGetUserDatabase(), username, password);
- }
+ protected Log log = LogFactory.getLog(Constants.PACKAGE);
/**
* <p>
- * Return a reference to the UserDatabase
- * or null if the database is not available.
+ * Persist the User object, including subscriptions, to the database.
* </p>
*
- * @return a reference to the UserDatabase or null if the database is not
- * available
+ * @throws javax.servlet.ServletException On any error
*/
- protected UserDatabase doGetUserDatabase() {
- return (UserDatabase) getSession().get(Constants.DATABASE_KEY);
+ protected void saveUser() throws Exception {
+ try {
+ getDatabase().save();
+ } catch (Exception e) {
+ String message = Constants.LOG_DATABASE_SAVE_ERROR + getUser().getUsername();
+ log.error(message, e);
+ throw new Exception(message, e);
+ }
}
+ // ---- Subscription property ----
+
/**
* <p>
- * Helper method to obtain User form session (if any).
+ * Obtain the cached Subscription object, if any.
* </p>
*
- * @return User object, or null if there is no user.
+ * @return Cached Subscription object or null
*/
- protected User doGetUser() {
- return (User) getSession().get(Constants.USER_KEY);
+ protected Subscription getSubscription() {
+ return (Subscription) getSession().get(Constants.SUBSCRIPTION_KEY);
}
- /**
- * <p>
- * The <code>Log</code> instance for this application.
- * </p>
- */
- protected Log log = LogFactory.getLog(Constants.PACKAGE);
+ protected void getSubscriprtion(Subscription subscription) {
+ getSession().put(Constants.SUBSCRIPTION_KEY,subscription);
+ }
+
+ // ---- Control methods ----
/**
* <p>
- * Persist the User object, including subscriptions, to the database.
+ * Helper method to log event and cancel transaction.
* </p>
*
- * @param user Our User object
- * @throws javax.servlet.ServletException On any error
+ * @param method Method being processed
+ * @param key Attrkibute to remove from session, if any
*/
- protected void doSaveUser(User user) throws ServletException {
-
- try {
- UserDatabase database = doGetUserDatabase();
- database.save();
- } catch (Exception e) {
- String message = Constants.LOG_DATABASE_SAVE_ERROR + user.getUsername();
- log.error(message, e);
- throw new ServletException(message, e);
+ protected void doCancel(String method, String key) {
+ if (key != null) {
+ getSession().remove(key);
}
}
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=387104&r1=387103&r2=387104&view=diff
==============================================================================
--- struts/sandbox/trunk/action2/apps/mailreader/src/java/xwork.xml (original)
+++ struts/sandbox/trunk/action2/apps/mailreader/src/java/xwork.xml Sun Mar 19 17:59:56 2006
@@ -3,9 +3,9 @@
<xwork>
<include file="webwork-default.xml"/>
- <package name="default" extends="webwork-default">
+ <package name="default" namespace="/" extends="webwork-default">
- <default-action-ref name="Welcome"/>
+ <!-- default-action-ref name="Welcome"/ -->
<action name="Welcome">
<result>/pages/Welcome.jsp</result>
@@ -16,13 +16,13 @@
<exception-mapping
exception="org.apache.struts.apps.mailreader.dao.ExpiredPasswordException"
result="expired"/>
- <result name="input">/pages/Logon.jsp</result>
- <result name="expired" type="chain">Password!input</result>
<result>/pages/MainMenu.jsp</result>
+ <result name="input">/pages/Logon.jsp</result>
+ <result name="expired" type="chain">ChangePassword</result>
</action>
- <action name="Password">
- <result name="input">/pages/ChangePassword.jsp</result>
+ <action name="ChangePassword">
+ <result>/pages/ChangePassword.jsp</result>
</action>
<action name="MainMenu">
@@ -34,7 +34,7 @@
</action>
<action name="Logoff">
- <result type="chain">MainMenu</result>
+ <result type="chain">Welcome</result>
</action>
</package>
Modified: struts/sandbox/trunk/action2/apps/mailreader/src/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/webapp/WEB-INF/web.xml?rev=387104&r1=387103&r2=387104&view=diff
==============================================================================
--- struts/sandbox/trunk/action2/apps/mailreader/src/webapp/WEB-INF/web.xml (original)
+++ struts/sandbox/trunk/action2/apps/mailreader/src/webapp/WEB-INF/web.xml Sun Mar 19 17:59:56 2006
@@ -18,6 +18,13 @@
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
+ <!-- Application Listener for Mailreader database -->
+ <listener>
+ <listener-class>
+ mailreader2.ApplicationListener
+ </listener-class>
+ </listener>
+
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
Modified: struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/ChangePassword.jsp
URL: http://svn.apache.org/viewcvs/struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/ChangePassword.jsp?rev=387104&r1=387103&r2=387104&view=diff
==============================================================================
--- struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/ChangePassword.jsp (original)
+++ struts/sandbox/trunk/action2/apps/mailreader/src/webapp/pages/ChangePassword.jsp Sun Mar 19 17:59:56 2006
@@ -7,10 +7,15 @@
</head>
<body>
- <ww:text name="change.message"/>
- <a href="<ww:url action="Logon"/>">
- <ww:text name="change.try"/>
- </a>
+ <p>
+ <ww:text name="change.message"/>
+ </p>
+
+ <p>
+ <a href="<ww:url action="Logon!input"/>">
+ <ww:text name="change.try"/>
+ </a>
+ </p>
</body>
</html>
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=387104&r1=387103&r2=387104&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 Sun Mar 19 17:59:56 2006
@@ -8,17 +8,12 @@
<body>
-<ww:form action="Logon" method="POST">
- <table border="0" width="100%">
+<ww:form method="POST">
+ <ww:textfield label="%{getText('prompt.username')}" name="username" />
- <ww:textfield label="%{getText('prompt.username'}" name="username" size="16" maxlength="18"/>
-
- <ww:textfield label="%{getText('prompt.password'}" name="password" size="16" maxlength="18"/>
+ <ww:textfield label="%{getText('prompt.password')}" name="password" />
<ww:submit />
-
- </table>
-
</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=387104&r1=387103&r2=387104&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 Sun Mar 19 17:59:56 2006
@@ -3,18 +3,17 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title><ww:text name="mainMenu.title"/></title>
- <link rel="stylesheet" type="text/css" href="base.css"/>
+ <link href="<ww:url value="/css/mailreader.css"/>" rel="stylesheet" type="text/css" />
</head>
<body>
-<h3><ww:text name="mainMenu.heading"/> <bean:write name="user"
- property="fullName"/></h3>
+<h3><ww:text name="mainMenu.heading"/> <ww:property value="user.fullName"/></h3>
<ul>
<li><a href="<ww:url action="Registration!edit" />">
<ww:text name="mainMenu.registration" />
</a>
</li>
- <li><a href="<ww:url action="Loggoff"/>">
+ <li><a href="<ww:url action="Logoff"/>">
<ww:text name="mainMenu.logoff" />
</a>
</ul>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org