Author: mrdon
Date: Sat Jun 17 22:47:30 2006
New Revision: 415098
URL: http://svn.apache.org/viewvc?rev=415098&view=rev
Log:
Changed JSF example to use common CRUD actions and DAO's, reorganizes
pages to match other example
WW-1320
Added:
struts/action2/trunk/apps/showcase/src/main/java/org/apache/struts/action2/showcase/jsf/JsfEmployeeAction.java
struts/action2/trunk/apps/showcase/src/main/webapp/jsf/employee/
struts/action2/trunk/apps/showcase/src/main/webapp/jsf/employee/edit.jsp
struts/action2/trunk/apps/showcase/src/main/webapp/jsf/employee/list.jsp
Removed:
struts/action2/trunk/apps/showcase/src/main/java/org/apache/struts/action2/showcase/jsf/EditEmployeeAction.java
struts/action2/trunk/apps/showcase/src/main/java/org/apache/struts/action2/showcase/jsf/Employee.java
struts/action2/trunk/apps/showcase/src/main/java/org/apache/struts/action2/showcase/jsf/EmployeeDao.java
struts/action2/trunk/apps/showcase/src/main/java/org/apache/struts/action2/showcase/jsf/ListEmployeesAction.java
struts/action2/trunk/apps/showcase/src/main/webapp/jsf/editEmployee.jsp
struts/action2/trunk/apps/showcase/src/main/webapp/jsf/listEmployees.jsp
Modified:
struts/action2/trunk/apps/showcase/src/main/java/org/apache/struts/action2/showcase/action/EmployeeAction.java
struts/action2/trunk/apps/showcase/src/main/resources/xwork-jsf.xml
struts/action2/trunk/apps/showcase/src/main/webapp/WEB-INF/decorators/main.jsp
struts/action2/trunk/apps/showcase/src/main/webapp/WEB-INF/web.xml
struts/action2/trunk/apps/showcase/src/main/webapp/jsf/index.jsp
Modified:
struts/action2/trunk/apps/showcase/src/main/java/org/apache/struts/action2/showcase/action/EmployeeAction.java
URL:
http://svn.apache.org/viewvc/struts/action2/trunk/apps/showcase/src/main/java/org/apache/struts/action2/showcase/action/EmployeeAction.java?rev=415098&r1=415097&r2=415098&view=diff
==============================================================================
---
struts/action2/trunk/apps/showcase/src/main/java/org/apache/struts/action2/showcase/action/EmployeeAction.java
(original)
+++
struts/action2/trunk/apps/showcase/src/main/java/org/apache/struts/action2/showcase/action/EmployeeAction.java
Sat Jun 17 22:47:30 2006
@@ -31,7 +31,7 @@
import java.util.List;
/**
- * EditEmployeeAction.
+ * JsfEmployeeAction.
*/
public class EmployeeAction extends AbstractCRUDAction implements Preparable {
@@ -83,7 +83,7 @@
public void setEmployeeDao(EmployeeDao employeeDao) {
if (log.isDebugEnabled()) {
- log.debug("EditEmployeeAction - [setEmployeeDao]: employeeDao
injected.");
+ log.debug("JsfEmployeeAction - [setEmployeeDao]: employeeDao
injected.");
}
this.employeeDao = employeeDao;
}
Added:
struts/action2/trunk/apps/showcase/src/main/java/org/apache/struts/action2/showcase/jsf/JsfEmployeeAction.java
URL:
http://svn.apache.org/viewvc/struts/action2/trunk/apps/showcase/src/main/java/org/apache/struts/action2/showcase/jsf/JsfEmployeeAction.java?rev=415098&view=auto
==============================================================================
---
struts/action2/trunk/apps/showcase/src/main/java/org/apache/struts/action2/showcase/jsf/JsfEmployeeAction.java
(added)
+++
struts/action2/trunk/apps/showcase/src/main/java/org/apache/struts/action2/showcase/jsf/JsfEmployeeAction.java
Sat Jun 17 22:47:30 2006
@@ -0,0 +1,119 @@
+/*
+ * $Id: QuizAction.java 394498 2006-04-16 15:28:06Z tmjee $
+ *
+ * Copyright 2006 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.
+ */
+package org.apache.struts.action2.showcase.jsf;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.struts.action2.showcase.action.EmployeeAction;
+import org.apache.struts.action2.showcase.dao.SkillDao;
+import org.apache.struts.action2.showcase.model.Employee;
+import org.apache.struts.action2.showcase.model.Skill;
+
+/**
+ * Overriding the EmployeeAction to main provide getters returning the data in
+ * the form required by the JSF components
+ */
+public class JsfEmployeeAction extends EmployeeAction {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Creating a default employee and main skill, since the JSF EL can't
handle
+ * creating new objects as necessary
+ *
+ */
+ public JsfEmployeeAction() {
+ Employee e = new Employee();
+ e.setMainSkill(new Skill());
+ setCurrentEmployee(e);
+ }
+
+ private SkillDao skillDao;
+
+ public void setSkillDao(SkillDao skillDao) {
+ this.skillDao = skillDao;
+ }
+
+ /**
+ * Returning a List because the JSF dataGrid can't handle a Set for some
+ * reason
+ */
+ @Override
+ public Collection getAvailableItems() {
+ return new ArrayList(super.getAvailableItems());
+ }
+
+ /**
+ * Changing the String array into a Map
+ */
+ public Map<String, String> getAvailablePositionsAsMap() {
+ Map<String, String> map = new LinkedHashMap<String, String>();
+ for (String val : super.getAvailablePositions()) {
+ map.put(val, val);
+ }
+ return map;
+ }
+
+ /**
+ * Converting the list into a map
+ */
+ public Map getAvailableLevelsAsMap() {
+ Map map = new LinkedHashMap();
+ for (Object val : super.getAvailableLevels()) {
+ map.put(val, val);
+ }
+ return map;
+ }
+
+ /**
+ * Converting the Skill object list into a map
+ */
+ public Map<String, String> getAvailableSkills() {
+ Map<String, String> map = new HashMap<String, String>();
+ for (Object val : skillDao.findAll()) {
+ Skill skill = (Skill) val;
+ map.put(skill.getDescription(), skill.getName());
+ }
+ return map;
+ }
+
+ /**
+ * Gets the selected Skill objects as a list
+ */
+ public List<String> getSelectedSkillsAsList() {
+ System.out.println("asked for skills");
+ List<String> list = new ArrayList<String>();
+ List skills = super.getSelectedSkills();
+ if (skills != null) {
+ for (Object val : skills) {
+ if (val instanceof Skill) {
+ list.add(((Skill) val).getDescription());
+ } else {
+ Skill skill = skillDao.getSkill((String) val);
+ list.add(skill.getDescription());
+ }
+ }
+ }
+ return list;
+ }
+}
Modified: struts/action2/trunk/apps/showcase/src/main/resources/xwork-jsf.xml
URL:
http://svn.apache.org/viewvc/struts/action2/trunk/apps/showcase/src/main/resources/xwork-jsf.xml?rev=415098&r1=415097&r2=415098&view=diff
==============================================================================
--- struts/action2/trunk/apps/showcase/src/main/resources/xwork-jsf.xml
(original)
+++ struts/action2/trunk/apps/showcase/src/main/resources/xwork-jsf.xml Sat Jun
17 22:47:30 2006
@@ -3,20 +3,31 @@
<include file="struts-default.xml"/>
<include file="struts-jsf.xml"/>
- <package name="jsf" extends="struts-default, struts-jsf" namespace="/jsf">
-
- <action name="listEmployees"
class="org.apache.struts.action2.showcase.jsf.ListEmployeesAction">
- <interceptor-ref name="jsfStack"/>
- <result name="success" type="jsf" />
+ <package name="jsf" extends="struts-default, struts-jsf"
namespace="/jsf">
+ <interceptors>
+ <interceptor-stack name="jsfFullStack">
+ <interceptor-ref name="params" />
+ <interceptor-ref name="basicStack"/>
+ <interceptor-ref name="jsfStack"/>
+ </interceptor-stack>
+ </interceptors>
+
+ <default-interceptor-ref name="jsfFullStack"/>
+ </package>
+
+ <package name="jsf.employee" extends="jsf" namespace="/jsf/employee">
+
+ <action name="list"
class="org.apache.struts.action2.showcase.jsf.JsfEmployeeAction" method="list">
+ <result name="success" type="jsf" />
</action>
-
- <action name="editEmployee"
class="org.apache.struts.action2.showcase.jsf.EditEmployeeAction">
- <interceptor-ref name="basicStack"/>
- <interceptor-ref name="jsfStack"/>
+ <action name="edit"
class="org.apache.struts.action2.showcase.jsf.JsfEmployeeAction">
<result name="success" type="jsf" />
- <result name="index" type="redirect-action">listEmployees</result>
</action>
-
+ <action name="delete"
class="org.apache.struts.action2.showcase.action.EmployeeAction"
method="delete">
+ <result name="error"
type="redirect">list.action</result>
+ <result type="redirect">list.action</result>
+ </action>
+
</package>
</xwork>
Modified:
struts/action2/trunk/apps/showcase/src/main/webapp/WEB-INF/decorators/main.jsp
URL:
http://svn.apache.org/viewvc/struts/action2/trunk/apps/showcase/src/main/webapp/WEB-INF/decorators/main.jsp?rev=415098&r1=415097&r2=415098&view=diff
==============================================================================
---
struts/action2/trunk/apps/showcase/src/main/webapp/WEB-INF/decorators/main.jsp
(original)
+++
struts/action2/trunk/apps/showcase/src/main/webapp/WEB-INF/decorators/main.jsp
Sat Jun 17 22:47:30 2006
@@ -76,7 +76,7 @@
<li><a href="<saf:url
value="/token/index.jsp"/>">Token</a></li>
<li><a href="<saf:url
value="/filedownload/index.jsp"/>">File Download</a></li>
<li><a href="<saf:url
value="/conversion/index.jsp"/>"/>Conversion</a></li>
- <li><a href="<saf:url action="index"
namespace="/jsf"/>">JSF</a></li>
+ <li><a href="<saf:url
value="/jsf/index.jsp"/>">JSF</a></li>
<li><a href="<saf:url
value="/freemarker/index.jsp"/>">Freemarker</a>
<li><a href="<saf:url value="/chat/index.jsp"/>">Chat
(AJAX)</a>
<li class="last"><a href="<saf:url
value="/help.jsp"/>">Help</a></li>
Modified: struts/action2/trunk/apps/showcase/src/main/webapp/WEB-INF/web.xml
URL:
http://svn.apache.org/viewvc/struts/action2/trunk/apps/showcase/src/main/webapp/WEB-INF/web.xml?rev=415098&r1=415097&r2=415098&view=diff
==============================================================================
--- struts/action2/trunk/apps/showcase/src/main/webapp/WEB-INF/web.xml
(original)
+++ struts/action2/trunk/apps/showcase/src/main/webapp/WEB-INF/web.xml Sat Jun
17 22:47:30 2006
@@ -42,11 +42,11 @@
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
- <listener>
- <listener-class>
- org.apache.myfaces.webapp.StartupServletContextListener
- </listener-class>
- </listener>
+ <listener>
+ <listener-class>
+ org.apache.myfaces.webapp.StartupServletContextListener
+ </listener-class>
+ </listener>
<!-- SNIPPET START: dwr -->
@@ -67,9 +67,9 @@
</servlet>
<!-- JavaServer Faces Servlet Mapping, not called directly -->
- <servlet-mapping>
- <servlet-name>faces</servlet-name>
- <url-pattern>*.action</url-pattern>
+ <servlet-mapping>
+ <servlet-name>faces</servlet-name>
+ <url-pattern>*.action</url-pattern>
</servlet-mapping>
<servlet-mapping>
Added: struts/action2/trunk/apps/showcase/src/main/webapp/jsf/employee/edit.jsp
URL:
http://svn.apache.org/viewvc/struts/action2/trunk/apps/showcase/src/main/webapp/jsf/employee/edit.jsp?rev=415098&view=auto
==============================================================================
--- struts/action2/trunk/apps/showcase/src/main/webapp/jsf/employee/edit.jsp
(added)
+++ struts/action2/trunk/apps/showcase/src/main/webapp/jsf/employee/edit.jsp
Sat Jun 17 22:47:30 2006
@@ -0,0 +1,106 @@
+<%--
+
+ Copyright 2006 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: welcome.jsp 371852 2006-01-24 07:25:10Z craigmcc $
+
+--%>
+
+<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
+<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
+
+<f:view>
+
+<html>
+<!-- todo: make header variable -->
+ <head>
+ <title>JSF Integration Examples</title>
+ </head>
+
+ <body>
+
+ <h1>Modify Employee</h1>
+
+ <h:form>
+ <h:inputHidden value="#{action.currentEmployee.empId}" />
+ <h:panelGrid columns="3">
+ <h:outputText value="Employee Id:" />
+ <h:inputText id="id" size="5"
value="#{action.currentEmployee.empId}" required="true" />
+ <h:message for="id" />
+
+ <h:outputText value="First Name:" />
+ <h:inputText id="firstName" size="30"
value="#{action.currentEmployee.firstName}" required="true">
+ <f:validateLength minimum="2" maximum="30" />
+ </h:inputText>
+ <h:message for="firstName" />
+
+ <h:outputText value="Last Name:" />
+ <h:inputText id="lastName" size="30"
value="#{action.currentEmployee.lastName}" required="true">
+ <f:validateLength minimum="2" maximum="30" />
+ </h:inputText>
+ <h:message for="lastName" />
+
+ <h:outputText value="Salary:" />
+ <h:inputText id="salary" size="10"
value="#{action.currentEmployee.salary}" />
+ <h:message for="salary" />
+
+ <h:outputText value="Married:" />
+ <h:selectBooleanCheckbox id="married"
value="#{action.currentEmployee.married}" />
+ <h:message for="married" />
+
+ <h:outputText value="Position:" />
+ <h:selectOneMenu id="position"
value="#{action.currentEmployee.position}">
+ <f:selectItems
value="#{action.availablePositionsAsMap}" />
+ </h:selectOneMenu>
+ <h:message for="position" />
+
+ <h:outputText value="Main Skill:" />
+ <h:selectOneMenu id="mainSkill"
value="#{action.currentEmployee.mainSkill.name}">
+ <f:selectItems value="#{action.availableSkills}" />
+ </h:selectOneMenu>
+ <h:message for="mainSkill" />
+
+ <h:outputText value="Other Skills:" />
+ <h:selectManyListbox id="otherSkills"
value="#{action.selectedSkills}" >
+ <f:selectItems value="#{action.availableSkills}" />
+ </h:selectManyListbox>
+ <h:message for="otherSkills" />
+
+ <h:outputText value="Password:" />
+ <h:inputSecret id="password"
value="#{action.currentEmployee.password}" />
+ <h:message for="password" />
+
+ <h:outputText value="Level:" />
+ <h:selectOneRadio id="level"
value="#{action.currentEmployee.level}" >
+ <f:selectItems
value="#{action.availableLevelsAsMap}" />
+ </h:selectOneRadio>
+ <h:message for="level" />
+
+ <h:outputText value="Comment:" />
+ <h:inputTextarea id="comment"
value="#{action.currentEmployee.comment}" cols="50" rows="3" />
+ <h:message for="comment" />
+ </h:panelGrid>
+
+ <h:commandButton value="Save" action="#{action.save}" />
+ <br /><br />
+ <h:outputLink value="list.action">
+ <h:outputText value="Back" />
+ </h:outputLink>
+ </h:form>
+ </body>
+
+</html>
+
+</f:view>
\ No newline at end of file
Added: struts/action2/trunk/apps/showcase/src/main/webapp/jsf/employee/list.jsp
URL:
http://svn.apache.org/viewvc/struts/action2/trunk/apps/showcase/src/main/webapp/jsf/employee/list.jsp?rev=415098&view=auto
==============================================================================
--- struts/action2/trunk/apps/showcase/src/main/webapp/jsf/employee/list.jsp
(added)
+++ struts/action2/trunk/apps/showcase/src/main/webapp/jsf/employee/list.jsp
Sat Jun 17 22:47:30 2006
@@ -0,0 +1,69 @@
+<%--
+
+ Copyright 2006 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: welcome.jsp 371852 2006-01-24 07:25:10Z craigmcc $
+
+--%>
+
+<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
+<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
+
+<f:view>
+
+<html>
+<head><title>Available Employees</title></head>
+
+<body>
+<h1>Available Employees</h1>
+
+ <h:dataTable value="#{action.availableItems}" var="e">
+ <h:column>
+ <f:facet name="header">
+ <h:outputText value="Id" />
+ </f:facet>
+ <h:outputLink value="edit.action">
+ <f:param name="empId" value="#{e.empId}" />
+ <h:outputText value="#{e.empId}" />
+ </h:outputLink>
+ </h:column>
+ <h:column>
+ <f:facet name="header">
+ <h:outputText value="First Name" />
+ </f:facet>
+ <h:outputText value="#{e.firstName}" />
+ </h:column>
+ <h:column>
+ <f:facet name="header">
+ <h:outputText value="Last Name" />
+ </f:facet>
+ <h:outputText value="#{e.lastName}" />
+ </h:column>
+ </h:dataTable>
+
+ <p>
+ <h:outputLink value="edit.action">
+ <h:outputText value="Create new Employee" />
+ </h:outputLink>
+ </p>
+
+ <h:outputLink value="../../showcase.action">
+ <h:outputText value="Back to Showcase Startpage" />
+ </h:outputLink>
+ </body>
+
+</html>
+
+</f:view>
\ No newline at end of file
Modified: struts/action2/trunk/apps/showcase/src/main/webapp/jsf/index.jsp
URL:
http://svn.apache.org/viewvc/struts/action2/trunk/apps/showcase/src/main/webapp/jsf/index.jsp?rev=415098&r1=415097&r2=415098&view=diff
==============================================================================
--- struts/action2/trunk/apps/showcase/src/main/webapp/jsf/index.jsp (original)
+++ struts/action2/trunk/apps/showcase/src/main/webapp/jsf/index.jsp Sat Jun 17
22:47:30 2006
@@ -11,14 +11,14 @@
The following pages show how Struts Action 2 and JSF components can work
together,
each doing what they do best.
</p>
-
+
<p>
<ul>
- <li><saf:url id="url" namespace="/jsf"
action="listEmployees"/><saf:a href="%{url}">List available
Employees</saf:a></li>
- <li><saf:url id="url" namespace="/jsf" action="editEmployee"/><saf:a
href="%{url}">Create/Edit Employee</saf:a></li>
+ <li><saf:url id="url" namespace="/jsf/employee" action="list"/><saf:a
href="%{url}">List available Employees</saf:a></li>
+ <li><saf:url id="url" namespace="/jsf/employee" action="edit"/><saf:a
href="%{url}">Create/Edit Employee</saf:a></li>
</ul>
</p>
-<p>
+
</body>
-</html>
\ No newline at end of file
+</html>