VYPR
Critical severity9.8CISA KEVNVD Advisory· Published Jul 10, 2017· Updated Apr 21, 2026

CVE-2017-9791

CVE-2017-9791

Description

The Struts 1 plugin in Apache Struts 2.1.x and 2.3.x might allow remote code execution via a malicious field value passed in a raw message to the ActionMessage.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
org.apache.struts:struts2-struts1-pluginMaven
<= 2.3.37

Affected products

33
  • Apache/Struts33 versions
    cpe:2.3:a:apache:struts:2.3.1:*:*:*:*:*:*:*+ 32 more
    • cpe:2.3:a:apache:struts:2.3.1:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.1.1:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.1.2:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.12:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.14:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.14.1:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.14.2:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.14.3:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.15:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.15.1:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.15.2:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.15.3:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.16:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.16.1:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.16.2:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.16.3:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.20:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.20.1:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.20.3:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.24:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.24.1:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.24.3:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.28:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.28.1:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.29:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.3:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.30:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.31:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.32:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.4:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.4.1:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.7:*:*:*:*:*:*:*
    • cpe:2.3:a:apache:struts:2.3.8:*:*:*:*:*:*:*

Patches

1
ffe0e20edd9d

Cleanup struts2 showcase after removing of deprecated plugins

https://github.com/apache/strutsJohannes GeppertMay 25, 2015via ghsa
106 files changed · +239 4826
  • apps/showcase/pom.xml+0 16 modified
    @@ -45,22 +45,6 @@
             </profile>
         </profiles>
         <dependencies>
    -
    -        <dependency>
    -            <groupId>org.apache.struts</groupId>
    -            <artifactId>struts2-struts1-plugin</artifactId>
    -        </dependency>
    -
    -        <dependency>
    -            <groupId>org.apache.struts</groupId>
    -            <artifactId>struts2-dojo-plugin</artifactId>
    -        </dependency>
    -
    -        <dependency>
    -            <groupId>org.apache.struts</groupId>
    -            <artifactId>struts2-jsf-plugin</artifactId>
    -        </dependency>
    -
             <dependency>
                 <groupId>org.apache.struts</groupId>
                 <artifactId>struts2-config-browser-plugin</artifactId>
    
  • apps/showcase/src/main/java/org/apache/struts2/showcase/integration/EditGangsterAction.java+0 44 removed
    @@ -1,44 +0,0 @@
    -/*
    - * $Id$
    - *
    - * Licensed to the Apache Software Foundation (ASF) under one
    - * or more contributor license agreements.  See the NOTICE file
    - * distributed with this work for additional information
    - * regarding copyright ownership.  The ASF licenses this file
    - * to you 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.struts2.showcase.integration;
    -
    -import org.apache.struts.action.Action;
    -import org.apache.struts.action.ActionForm;
    -import org.apache.struts.action.ActionForward;
    -import org.apache.struts.action.ActionMapping;
    -
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
    -public class EditGangsterAction extends Action {
    -
    -	/* (non-Javadoc)
    -		 * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
    -		 */
    -	@Override
    -	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
    -		// Some code to load the gangster from the db as necessary
    -
    -		return mapping.findForward("success");
    -	}
    -
    -
    -}
    
  • apps/showcase/src/main/java/org/apache/struts2/showcase/integration/GangsterForm.java+0 115 removed
    @@ -1,115 +0,0 @@
    -/*
    - * $Id$
    - *
    - * Licensed to the Apache Software Foundation (ASF) under one
    - * or more contributor license agreements.  See the NOTICE file
    - * distributed with this work for additional information
    - * regarding copyright ownership.  The ASF licenses this file
    - * to you 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.struts2.showcase.integration;
    -
    -import org.apache.struts.action.ActionErrors;
    -import org.apache.struts.action.ActionMapping;
    -import org.apache.struts.action.ActionMessage;
    -import org.apache.struts.validator.ValidatorForm;
    -
    -import javax.servlet.http.HttpServletRequest;
    -
    -public class GangsterForm extends ValidatorForm {
    -
    -	private String name;
    -	private String age;
    -	private String description;
    -	private boolean bustedBefore;
    -
    -	/* (non-Javadoc)
    -		 * @see org.apache.struts.action.ActionForm#reset(org.apache.struts.action.ActionMapping, javax.servlet.http.HttpServletRequest)
    -		 */
    -	@Override
    -	public void reset(ActionMapping arg0, HttpServletRequest arg1) {
    -		bustedBefore = false;
    -	}
    -
    -	/* (non-Javadoc)
    -		 * @see org.apache.struts.action.ActionForm#validate(org.apache.struts.action.ActionMapping, javax.servlet.http.HttpServletRequest)
    -		 */
    -	@Override
    -	public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
    -		ActionErrors errors = super.validate(mapping, request);
    -		if (name == null || name.length() == 0) {
    -			errors.add("name", new ActionMessage("The name must not be blank"));
    -		}
    -
    -		return errors;
    -	}
    -
    -	/**
    -	 * @return the age
    -	 */
    -	public String getAge() {
    -		return age;
    -	}
    -
    -	/**
    -	 * @param age the age to set
    -	 */
    -	public void setAge(String age) {
    -		this.age = age;
    -	}
    -
    -	/**
    -	 * @return the bustedBefore
    -	 */
    -	public boolean isBustedBefore() {
    -		return bustedBefore;
    -	}
    -
    -	/**
    -	 * @param bustedBefore the bustedBefore to set
    -	 */
    -	public void setBustedBefore(boolean bustedBefore) {
    -		this.bustedBefore = bustedBefore;
    -	}
    -
    -	/**
    -	 * @return the description
    -	 */
    -	public String getDescription() {
    -		return description;
    -	}
    -
    -	/**
    -	 * @param description the description to set
    -	 */
    -	public void setDescription(String description) {
    -		this.description = description;
    -	}
    -
    -	/**
    -	 * @return the name
    -	 */
    -	public String getName() {
    -		return name;
    -	}
    -
    -	/**
    -	 * @param name the name to set
    -	 */
    -	public void setName(String name) {
    -		this.name = name;
    -	}
    -
    -
    -}
    
  • apps/showcase/src/main/java/org/apache/struts2/showcase/integration/SaveGangsterAction.java+0 46 removed
    @@ -1,46 +0,0 @@
    -/*
    - * $Id$
    - *
    - * Licensed to the Apache Software Foundation (ASF) under one
    - * or more contributor license agreements.  See the NOTICE file
    - * distributed with this work for additional information
    - * regarding copyright ownership.  The ASF licenses this file
    - * to you 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.struts2.showcase.integration;
    -
    -import org.apache.struts.action.*;
    -
    -import javax.servlet.http.HttpServletRequest;
    -import javax.servlet.http.HttpServletResponse;
    -
    -public class SaveGangsterAction extends Action {
    -
    -	/* (non-Javadoc)
    -		 * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
    -		 */
    -	@Override
    -	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
    -
    -		// Some code to save the gangster to the db as necessary
    -		GangsterForm gform = (GangsterForm) form;
    -		ActionMessages messages = new ActionMessages();
    -		messages.add("msg", new ActionMessage("Gangster " + gform.getName() + " added successfully"));
    -		addMessages(request, messages);
    -
    -		return mapping.findForward("success");
    -	}
    -
    -
    -}
    
  • apps/showcase/src/main/java/org/apache/struts2/showcase/jsf/JsfEmployeeAction.java+0 115 removed
    @@ -1,115 +0,0 @@
    -/*
    - * $Id$
    - *
    - * Licensed to the Apache Software Foundation (ASF) under one
    - * or more contributor license agreements.  See the NOTICE file
    - * distributed with this work for additional information
    - * regarding copyright ownership.  The ASF licenses this file
    - * to you 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.struts2.showcase.jsf;
    -
    -import org.apache.struts2.showcase.action.EmployeeAction;
    -import org.apache.struts2.showcase.dao.SkillDao;
    -import org.apache.struts2.showcase.model.Employee;
    -import org.apache.struts2.showcase.model.Skill;
    -import org.springframework.beans.factory.annotation.Autowired;
    -
    -import java.util.*;
    -
    -/**
    - * 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;
    -
    -	@Autowired
    -	private SkillDao skillDao;
    -
    -	/**
    -	 * 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);
    -	}
    -
    -
    -	/**
    -	 * 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;
    -	}
    -}
    
  • apps/showcase/src/main/resources/org/apache/struts2/showcase/ajax/Example5Action-validation.xml+0 19 removed
    @@ -1,19 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?>
    -<!DOCTYPE validators PUBLIC
    -  		"-//Apache Struts//XWork Validator 1.0//EN"
    -  		"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
    -  		
    -<validators>
    -	<field name="name">
    -		<field-validator type="requiredstring">
    -			<message>Name is required</message>
    -		</field-validator>
    -	</field>
    -	<field name="age">
    -		<field-validator type="required">
    -			<message>Age is required</message>
    -		</field-validator>
    -	</field>
    -</validators>  		
    -
    -
    
  • apps/showcase/src/main/resources/org/apache/struts2/showcase/chat/ChatLoginAction-chatLogin-validation.xml+0 14 removed
    @@ -1,14 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?>
    -<!DOCTYPE validators PUBLIC 
    -  		"-//Apache Struts//XWork Validator 1.0.2//EN"
    -  		"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
    -  		
    -<validators>
    -	<field name="name">
    -		<field-validator type="requiredstring">
    -			<param name="trim">true</param>
    -			<message>Name is required</message>
    -		</field-validator>
    -	</field>
    -</validators>
    -
    
  • apps/showcase/src/main/resources/org/apache/struts2/showcase/chat/ChatMessage-conversion.properties+0 1 removed
    @@ -1 +0,0 @@
    -creationDate=org.apache.struts2.showcase.chat.DateConverter
    
  • apps/showcase/src/main/resources/org/apache/struts2/showcase/chat/CrudRoomAction-createRoom-validation.xml+0 20 removed
    @@ -1,20 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?>
    -<!DOCTYPE validators PUBLIC 
    -  		"-//Apache Struts//XWork Validator 1.0.2//EN"
    -  		"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
    -
    -<validators>
    -	<field name="name">
    -		<field-validator type="requiredstring">
    -			<param name="trim">true</param>
    -			<message>Room name is required</message>
    -		</field-validator>
    -	</field>
    -	<field name="description">
    -		<field-validator type="requiredstring">
    -			<param name="trim">true</param>
    -			<message>Room description is required</message>
    -		</field-validator>
    -	</field>
    -</validators>  		
    -  		
    \ No newline at end of file
    
  • apps/showcase/src/main/resources/org/apache/struts2/showcase/chat/Room-conversion.properties+0 1 removed
    @@ -1 +0,0 @@
    -creationDate=org.apache.struts2.showcase.chat.DateConverter
    
  • apps/showcase/src/main/resources/org/apache/struts2/showcase/chat/SendMessageToRoomAction-sendMessageToRoom-validation.xml+0 15 removed
    @@ -1,15 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?>
    -<!DOCTYPE validators PUBLIC 
    -  		"-//Apache Struts//XWork Validator 1.0.2//EN"
    -  		"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
    -
    -<validators>
    -	<field name="message">
    -		<field-validator type="requiredstring">
    -			<param name="trim">true</param>
    -			<message>Message is required</message>
    -		</field-validator>
    -	</field>
    -</validators>  		
    -
    -  		
    \ No newline at end of file
    
  • apps/showcase/src/main/resources/struts-ajax.xml+0 114 removed
    @@ -1,114 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8" ?>
    -<!DOCTYPE struts PUBLIC
    -	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    -	"http://struts.apache.org/dtds/struts-2.3.dtd">
    -
    -<struts>
    -    <package name="ajax" extends="struts-default">
    -        <action name="AjaxTest" class="org.apache.struts2.showcase.ajax.AjaxTestAction">
    -            <result>/WEB-INF/ajax/AjaxResult.jsp</result>
    -        </action>
    -
    -        <action name="AjaxRemoteLink" class="org.apache.struts2.showcase.ajax.AjaxTestAction">
    -            <result>/WEB-INF/ajax/AjaxResult2.js</result>
    -        </action>
    -
    -        <action name="AjaxRemoteForm" class="org.apache.struts2.showcase.ajax.AjaxTestAction">
    -            <result>/WEB-INF/ajax/AjaxResult3.jsp</result>
    -        </action>
    -
    -        <action name="Test1">
    -            <result>/WEB-INF/ajax/remoteforms/test2.jsp</result>
    -        </action>
    -
    -        <action name="Test2">
    -            <result>/WEB-INF/ajax/remoteforms/test3.jsp</result>
    -        </action>
    -
    -        <action name="Test3">
    -            <result>/WEB-INF/ajax/testjs.jsp</result>
    -        </action>
    -
    -        <action name="JSONList">
    -            <result>/ajax/JSONList.js</result>
    -        </action>
    -
    -        <action name="tree">
    -            <result>/WEB-INF/ajax/tree/tree.jsp</result>
    -        </action>
    -
    -        <action name="getCategory" class="org.apache.struts2.showcase.ajax.tree.GetCategory">
    -            <result>/WEB-INF/ajax/tree/getCategory.jsp</result>
    -        </action>
    -
    -        <action name="toggle" class="org.apache.struts2.showcase.ajax.tree.Toggle">
    -            <result>/WEB-INF/ajax/tree/toggle.jsp</result>
    -        </action>
    -
    -        <action name="example4">
    -        	<result type="freemarker">/WEB-INF/ajax/tabbedpanel/example4.ftl</result>
    -        </action>
    -
    -        <action name="example5" class="org.apache.struts2.showcase.ajax.Example5Action">
    -        	<result name="input">/WEB-INF/ajax/tabbedpanel/example5.jsp</result>
    -        	<result>/WEB-INF/ajax/tabbedpanel/example5Ok.jsp</result>
    -        </action>
    -    </package>
    -    
    -    <package name="ajax-examples" namespace="/ajax" extends="struts-default">
    -        <action name="bind">
    -            <result>/WEB-INF/ajax/bind/index.jsp</result>
    -        </action>
    -        <action name="autocompleter">
    -            <result>/WEB-INF/ajax/autocompleter/index.jsp</result>
    -        </action>
    -        <action name="remotebutton">
    -            <result>/WEB-INF/ajax/remotebutton/index.jsp</result>
    -        </action>
    -        <action name="remotediv">
    -            <result>/WEB-INF/ajax/remotediv/index.jsp</result>
    -        </action>
    -        <action name="remotelink">
    -            <result>/WEB-INF/ajax/remotelink/index.jsp</result>
    -        </action>
    -        <action name="tabbedpanel">
    -            <result>/WEB-INF/ajax/tabbedpanel/index.jsp</result>
    -        </action>
    -        <action name="remoteforms">
    -            <result>/WEB-INF/ajax/remoteforms/index.jsp</result>
    -        </action>
    -        <action name="widgets">
    -            <result>/WEB-INF/ajax/widgets/index.jsp</result>
    -        </action>
    -    </package>
    -
    -    <package name="ajaxNoDecorate" namespace="/nodecorate" extends="json-default">
    -    	<!--  example 4 -->
    -        <action name="panel1" class="org.apache.struts2.showcase.ajax.Example4ShowPanelAction" method="panel1">
    -    		<result type="freemarker">/WEB-INF/ajax/tabbedpanel/nodecorate/panel1.ftl</result>
    -    	</action>
    -    	<action name="panel2">
    -    		<result type="freemarker">/WEB-INF/ajax/tabbedpanel/nodecorate/panel2.ftl</result>
    -    	</action>
    -    	<action name="panel3">
    -    		<result type="freemarker">/WEB-INF/ajax/tabbedpanel/nodecorate/panel3.ftl</result>
    -    	</action>
    -    	<action name="panel2Submit" class="org.apache.struts2.showcase.ajax.Example4ShowPanelAction" method="panel2">
    -    		<result type="freemarker">/WEB-INF/ajax/tabbedpanel/nodecorate/panel2Submit.ftl</result>
    -    	</action>
    -    	<action name="panel3Submit" class="org.apache.struts2.showcase.ajax.Example4ShowPanelAction" method="panel3">
    -    		<result type="freemarker">/WEB-INF/ajax/tabbedpanel/nodecorate/panel3Submit.ftl</result>
    -    	</action>
    -       <action name="AutocompleterExample" class="org.apache.struts2.showcase.ajax.AutocompleterExampleAction">
    -           <result type="freemarker">/WEB-INF/ajax/options.ftl</result>
    -       </action>
    -       <action name="quizAjax" class="org.apache.struts2.showcase.validation.QuizAction">
    -            <interceptor-ref name="jsonValidationWorkflowStack"/>
    -            <result name="input">/WEB-INF/validation/quiz-ajax.jsp</result>
    -            <result>/WEB-INF/validation/quiz-success.jsp</result>
    -       </action>
    -       <action name="getNodes" class="org.apache.struts2.showcase.ShowAjaxDynamicTreeAction">
    -            <result type="freemarker">/WEB-INF/tags/ui/treeExampleAjaxDynamic.ftl</result>
    -        </action>
    -    </package>
    -</struts>
    
  • apps/showcase/src/main/resources/struts-chat.xml+0 135 removed
    @@ -1,135 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8" ?>
    -<!DOCTYPE struts PUBLIC
    -	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    -	"http://struts.apache.org/dtds/struts-2.3.dtd">
    -
    -<struts>
    -  <package name="chat" extends="struts-default" namespace="/chat">
    -    <interceptors>
    -      <interceptor name="chatAuthentication"
    -             class="org.apache.struts2.showcase.chat.ChatAuthenticationInterceptor" />
    -      <interceptor-stack name="chatAuthenticationStack">
    -        <interceptor-ref name="createSession" />
    -        <interceptor-ref name="exception"/>
    -                <interceptor-ref name="alias"/>
    -                <interceptor-ref name="servletConfig"/>
    -                <interceptor-ref name="prepare"/>
    -                <interceptor-ref name="i18n"/>
    -                <interceptor-ref name="chain"/>
    -                <interceptor-ref name="debugging"/>
    -                <interceptor-ref name="modelDriven"/>
    -                <interceptor-ref name="fileUpload"/>
    -                <interceptor-ref name="staticParams"/>
    -                <interceptor-ref name="params"/>
    -                <interceptor-ref name="conversionError"/>
    -                <interceptor-ref name="validation">
    -                    <param name="excludeMethods">input,back,cancel,browse</param>
    -                </interceptor-ref>
    -                <interceptor-ref name="workflow">
    -                    <param name="excludeMethods">input,back,cancel,browse</param>
    -                </interceptor-ref>
    -                <interceptor-ref name="chatAuthentication" />
    -      </interceptor-stack>
    -    </interceptors>
    -
    -    <global-results>
    -      <result name="login" type="freemarker">/WEB-INF/chat/chatLogin.ftl</result>
    -    </global-results>
    -
    -    <action name="main">
    -      <interceptor-ref name="chatAuthentication" />
    -      <result type="freemarker">/WEB-INF/chat/roomSelection.ftl</result>
    -    </action>
    -
    -    <action name="login" class="chatLoginAction">
    -      <interceptor-ref name="defaultStack" />
    -      <result type="redirect">/chat/showRooms.action</result>
    -      <result name="input" type="freemarker">/WEB-INF/chat/chatLogin.ftl</result>
    -    </action>
    -
    -    <action name="logout" class="chatLogoutAction">
    -      <interceptor-ref name="defaultStack" />
    -      <result type="redirect">/chat/main.action</result>
    -    </action>
    -
    -    <action name="showRooms">
    -      <interceptor-ref name="chatAuthenticationStack" />
    -      <result type="freemarker">/WEB-INF/chat/roomSelection.ftl</result>
    -    </action>
    -
    -    <action name="enterRoom" class="enterRoomAction">
    -      <interceptor-ref name="chatAuthenticationStack" />
    -      <result type="freemarker">/WEB-INF/chat/showRoom.ftl</result>
    -    </action>
    -
    -    <action name="exitRoom" class="exitRoomAction">
    -      <interceptor-ref name="chatAuthenticationStack" />
    -      <result type="redirect">/chat/showRooms.action</result>
    -    </action>
    -
    -  </package>
    -
    -  <package name="chat-remote" extends="struts-default" namespace="/chat/ajax">
    -    <interceptors>
    -      <interceptor name="chatAuthentication"
    -             class="org.apache.struts2.showcase.chat.ChatAuthenticationInterceptor" />
    -      <interceptor-stack name="chatAuthenticationStack">
    -        <interceptor-ref name="createSession" />
    -        <interceptor-ref name="exception"/>
    -                <interceptor-ref name="alias"/>
    -                <interceptor-ref name="servletConfig"/>
    -                <interceptor-ref name="prepare"/>
    -                <interceptor-ref name="i18n"/>
    -                <interceptor-ref name="chain"/>
    -                <interceptor-ref name="debugging"/>
    -                <interceptor-ref name="modelDriven"/>
    -                <interceptor-ref name="fileUpload"/>
    -                <interceptor-ref name="staticParams"/>
    -                <interceptor-ref name="params"/>
    -                <interceptor-ref name="conversionError"/>
    -                <interceptor-ref name="validation">
    -                    <param name="excludeMethods">input,back,cancel,browse</param>
    -                </interceptor-ref>
    -                <interceptor-ref name="workflow">
    -                    <param name="excludeMethods">input,back,cancel,browse</param>
    -                </interceptor-ref>
    -                <interceptor-ref name="chatAuthentication" />
    -      </interceptor-stack>
    -    </interceptors>
    -
    -
    -    <action name="usersAvailable" class="usersAvailableAction">
    -      <interceptor-ref name="chatAuthenticationStack" />
    -      <result type="freemarker">/WEB-INF/chat/usersAvailable.ftl</result>
    -    </action>
    -
    -    <action name="roomsAvailable" class="roomsAvailableAction">
    -      <interceptor-ref name="chatAuthenticationStack" />
    -      <result type="freemarker">/WEB-INF/chat/roomsAvailable.ftl</result>
    -    </action>
    -
    -    <action name="createRoom" class="crudRoomAction" method="create">
    -      <interceptor-ref name="chatAuthenticationStack" />
    -      <result type="freemarker">/WEB-INF/chat/createRoom.ftl</result>
    -      <result name="input" type="freemarker">/WEB-INF/chat/createRoom.ftl</result>
    -    </action>
    -
    -    <action name="messagesAvailableInRoom" class="messagesAvailableInRoomAction">
    -      <interceptor-ref name="chatAuthenticationStack" />
    -      <result type="freemarker">/WEB-INF/chat/messagesAvailableInRoom.ftl</result>
    -      <result name="input" type="freemarker">/WEB-INF/chat/messagesAvailableInRoom.ftl</result>
    -    </action>
    -
    -    <action name="sendMessageToRoom" class="sendMessageToRoomAction">
    -      <interceptor-ref name="chatAuthenticationStack" />
    -      <result type="freemarker">/WEB-INF/chat/sendMessageToRoomResult.ftl</result>
    -      <result name="input" type="freemarker">/WEB-INF/chat/sendMessageToRoomResult.ftl</result>
    -    </action>
    -
    -    <action name="usersAvailableInRoom" class="usersAvailableInRoomAction">
    -      <interceptor-ref name="chatAuthenticationStack" />
    -      <result type="freemarker">/WEB-INF/chat/usersAvailableInRoom.ftl</result>
    -    </action>
    -  </package>
    -</struts>
    -
    
  • apps/showcase/src/main/resources/struts-integration.xml+0 47 removed
    @@ -1,47 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8" ?>
    -<!DOCTYPE struts PUBLIC
    -	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    -	"http://struts.apache.org/dtds/struts-2.3.dtd">
    -
    -<struts>
    -  <package name="integration" extends="struts1-default" namespace="/integration">
    -
    -    <interceptors>
    -      <interceptor name="gangsterForm" class="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor">
    -        <param name="className">org.apache.struts2.showcase.integration.GangsterForm</param>
    -        <param name="name">gangsterForm</param>
    -      </interceptor>
    -      <interceptor name="gangsterValidation" class="org.apache.struts2.s1.ActionFormValidationInterceptor">
    -        <param name="pathnames">/org/apache/struts/validator/validator-rules.xml,/WEB-INF/validation.xml</param>
    -      </interceptor>
    -
    -      <interceptor-stack name="integration">
    -        <interceptor-ref name="staticParams"/>
    -        <interceptor-ref name="gangsterForm"/>
    -        <interceptor-ref name="modelDriven"/>
    -        <interceptor-ref name="actionForm-reset"/>
    -        <interceptor-ref name="basicStack"/>
    -        <interceptor-ref name="gangsterValidation"/>
    -        <interceptor-ref name="workflow"/>
    -      </interceptor-stack>
    -    </interceptors>
    -
    -    <default-interceptor-ref name="integration"/>
    -    <default-action-ref name="editGangster"/>
    -
    -    <!-- Display entry page that uses Model-Driven technique -->
    -    <action name="editGangster" class="org.apache.struts2.s1.Struts1Action">
    -      <param name="className">org.apache.struts2.showcase.integration.EditGangsterAction</param>
    -      <result>/WEB-INF/integration/modelDriven.jsp</result>
    -    </action>
    -
    -    <!-- Display the result page whose content is populated using the Model-Driven technique -->
    -    <action name="saveGangster" class="org.apache.struts2.s1.Struts1Action">
    -      <param name="className">org.apache.struts2.showcase.integration.SaveGangsterAction</param>
    -      <param name="validate">true</param>
    -      <result name="input">/WEB-INF/integration/modelDriven.jsp</result>
    -      <result>/WEB-INF/integration/modelDrivenResult.jsp</result>
    -    </action>
    -
    -  </package>
    -</struts>
    
  • apps/showcase/src/main/resources/struts-jsf.xml+0 44 removed
    @@ -1,44 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8" ?>
    -<!DOCTYPE struts PUBLIC
    -	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    -	"http://struts.apache.org/dtds/struts-2.3.dtd">
    -
    -<struts>
    -  <package name="jsf" extends="jsf-default" namespace="/jsf">
    -
    -      <result-types>
    -          <result-type name="jsf" class="org.apache.struts2.jsf.FacesResult" />
    -      </result-types>
    -
    -    <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"/>
    -
    -    <action name="index">
    -        <result>/WEB-INF/jsf/index.jsp</result>
    -    </action>
    -
    -  </package>
    -  
    -  <package name="jsf.employee" extends="jsf" namespace="/jsf/employee">
    -  
    -    <action name="list" class="org.apache.struts2.showcase.jsf.JsfEmployeeAction" method="list">
    -      <result name="success" type="jsf" />
    -    </action>
    -    <action name="edit" class="org.apache.struts2.showcase.jsf.JsfEmployeeAction">
    -      <result name="success" type="jsf" />
    -    </action>
    -    <action name="delete" class="org.apache.struts2.showcase.action.EmployeeAction" method="delete">
    -      <result name="error" type="redirect">list.action</result>
    -      <result type="redirect">list.action</result>
    -    </action>
    -  
    -  </package>
    -
    -</struts>
    
  • apps/showcase/src/main/resources/struts.xml+0 8 modified
    @@ -25,8 +25,6 @@
         <constant name="struts.serve.static" value="true" />
         <constant name="struts.serve.static.browserCache" value="false" />
     
    -    <include file="struts-chat.xml" />
    -    
         <include file="struts-interactive.xml" />
     
         <include file="struts-hangman.xml" />
    @@ -37,22 +35,16 @@
     
         <include file="struts-actionchaining.xml" />
     
    -    <include file="struts-ajax.xml" />
    -
         <include file="struts-fileupload.xml" />
     
         <include file="struts-person.xml" />
     
         <include file="struts-wait.xml" />
     
    -    <include file="struts-jsf.xml" />
    -
         <include file="struts-token.xml" />
     
         <include file="struts-model-driven.xml" />
     
    -    <include file="struts-integration.xml" />
    -
         <include file="struts-filedownload.xml" />
     
         <include file="struts-conversion.xml" />
    
  • apps/showcase/src/main/webapp/ajax/index.html+0 24 removed
    @@ -1,24 +0,0 @@
    -<html>
    -<head><title>AJAX Examples</title></head>
    -
    -<body>
    -
    -<h1>AJAX Example</h1>
    -
    -<p>
    -Note: The Ajax tags are experimental. These examples have only been tested under FireFox 1.5 and IE 6.
    -</p>
    -
    -<ul>
    -    <li><a href="bind.action">Bind tag</a></li>
    -    <li><a href="autocompleter.action">Autocompleter combobox tag</a></li>
    -    <li><a href="remotebutton.action">Remote button tag</a></li>
    -    <li><a href="remotediv.action">Remote div tag</a></li>
    -    <li><a href="remotelink.action">Remote link tag</a></li>
    -    <li><a href="tabbedpanel.action">Tabbed panel</a></li>
    -    <li><a href="remoteforms.action">Remote forms</a></li>
    -    <li><a href="widgets.action">Widgets </a> (may not work in all browsers!)
    -        see the <a href="http://www.dojotoolkit.org">dojo website</a> for more information</li>
    -</ul>
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/ajax/JSONList.js+0 63 removed
    @@ -1,63 +0,0 @@
    -[
    -	["Alabama","AL"],
    -	["Alaska","AK"],
    -	["American Samoa","AS"],
    -	["Arizona","AZ"],
    -	["Arkansas","AR"],
    -	["Armed Forces Europe","AE"],
    -	["Armed Forces Pacific","AP"],
    -	["Armed Forces the Americas","AA"],
    -	["California","CA"],
    -	["Colorado","CO"],
    -	["Connecticut","CT"],
    -	["Delaware","DE"],
    -	["District of Columbia","DC"],
    -	["Federated States of Micronesia","FM"],
    -	["Florida","FL"],
    -	["Georgia","GA"],
    -	["Guam","GU"],
    -	["Hawaii","HI"],
    -	["Idaho","ID"],
    -	["Illinois","IL"],
    -	["Indiana","IN"],
    -	["Iowa","IA"],
    -	["Kansas","KS"],
    -	["Kentucky","KY"],
    -	["Louisiana","LA"],
    -	["Maine","ME"],
    -	["Marshall Islands","MH"],
    -	["Maryland","MD"],
    -	["Massachusetts","MA"],
    -	["Michigan","MI"],
    -	["Minnesota","MN"],
    -	["Mississippi","MS"],
    -	["Missouri","MO"],
    -	["Montana","MT"],
    -	["Nebraska","NE"],
    -	["Nevada","NV"],
    -	["New Hampshire","NH"],
    -	["New Jersey","NJ"],
    -	["New Mexico","NM"],
    -	["New York","NY"],
    -	["North Carolina","NC"],
    -	["North Dakota","ND"],
    -	["Northern Mariana Islands","MP"],
    -	["Ohio","OH"],
    -	["Oklahoma","OK"],
    -	["Oregon","OR"],
    -	["Pennsylvania","PA"],
    -	["Puerto Rico","PR"],
    -	["Rhode Island","RI"],
    -	["South Carolina","SC"],
    -	["South Dakota","SD"],
    -	["Tennessee","TN"],
    -	["Texas","TX"],
    -	["Utah","UT"],
    -	["Vermont","VT"],
    -	["Virgin Islands, U.S.","VI"],
    -	["Virginia","VA"],
    -	["Washington","WA"],
    -	["West Virginia","WV"],
    -	["Wisconsin","WI"],
    -	["Wyoming","WY"]
    -]
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/AjaxResult2.js+0 2 removed
    @@ -1,2 +0,0 @@
    -alert('This JavaScript currently being evaluated is the result...');
    -alert('... of an action executed on the server!');
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/AjaxResult3.jsp+0 12 removed
    @@ -1,12 +0,0 @@
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -
    -<%
    -    request.setAttribute("decorator", "none");
    -    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    -    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    -    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
    -%>
    -
    -Result: <s:property value="count"/> @ <s:property value="serverTime"/>
    -
    -The value you entered was: <s:property value="data"/><br/>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/AjaxResult.jsp+0 12 removed
    @@ -1,12 +0,0 @@
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -
    -<%
    -    request.setAttribute("decorator", "none");
    -    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    -    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    -    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
    -%>
    -
    -Result: <s:property value="count"/> @ <s:property value="serverTime"/> 
    -<br/>
    -<s:property value="data"/>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/autocompleter/index.jsp+0 186 removed
    @@ -1,186 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -<html>
    -<head>
    -    <title>Ajax Examples</title>
    -
    -    <!--// START SNIPPET: common-include-->
    -    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
    -    <!--// END SNIPPET: common-include-->
    -</head>
    -
    -<script type="text/javascript">
    -   dojo.event.topic.subscribe("/before", function(event, widget){
    -      alert('inside a topic event. before request');
    -      //event: set event.cancel = true, to cancel request
    -      //widget: widget that published the topic
    -   });
    -   
    -   dojo.event.topic.subscribe("/after", function(data, request, widget){
    -      alert('inside a topic event. after request');
    -      //data : json object from request
    -      //request: XMLHttpRequest object
    -      //widget: widget that published the topic
    -   });
    -   
    -   dojo.event.topic.subscribe("/value", function(error, request, widget){
    -      alert('inside a topic event. on error');
    -      //error : error object (error.message has the error message)
    -      //request: XMLHttpRequest object
    -      //widget: widget that published the topic
    -   });
    -   
    -   function showKey() {
    -      var autoCompleter = dojo.widget.byId('jsauto');
    -      alert(autoCompleter.getSelectedKey());
    -   }
    -   
    -   function showValue() {
    -      var autoCompleter = dojo.widget.byId('jsauto');
    -      alert(autoCompleter.getSelectedValue());
    -   }
    -</script>
    -
    -<body>
    -
    -
    -<s:url var="jsonList" value="/JSONList.action"/>
    -
    -Using a JSON list returned from an action (href="/JSONList.action"), without autoComplete (autoComplete="false"), use indicator, search substring (searchType="substring")
    -<br/>
    -<sx:autocompleter
    -    id="auto1"
    -    indicator="indicator1" 
    -    href="%{jsonList}" 
    -    cssStyle="width: 200px;" 
    -    autoComplete="false" 
    -    searchType="substring"
    -    name="state"/>
    -<img id="indicator1" src="${pageContext.request.contextPath}/images/indicator.gif" alt="Loading..." style="display:none"/>
    -
    -<br/><br/>
    -
    -Reload on type (loadOnTextChange="true"), after 3 characters (loadMinimumCount="3", it is "3" by default), without the down arrow button (showDownArrow="false")
    -<br/>
    -<sx:autocompleter  
    -    id="auto2"
    -    indicator="indicator" 
    -    href="%{jsonList}" 
    -    cssStyle="width: 200px;" 
    -    autoComplete="false" 
    -    loadOnTextChange="true"
    -    loadMinimumCount="3"
    -    showDownArrow="false"/>
    -<img id="indicator" src="${pageContext.request.contextPath}/images/indicator.gif" alt="Loading..." style="display:none"/>
    -
    -<br/><br/>
    -
    -Using a JSON list returned from an action (href="/JSONList.action"), with autoComplete (autoComplete="true")
    -<br/>
    -<sx:autocompleter
    -    id="auto3"
    -    name="auto3"
    -    href="%{#jsonList}" 
    -    cssStyle="width: 200px;" 
    -    autoComplete="true" />
    -
    -<br/><br/>
    -
    -Using a local list (list="%{'apple','banana','grape','pear'}")
    -<br/>
    -<sx:autocompleter id="auto-list" list="{'apple','banana','grape','pear'}" cssStyle="width: 150px;"/>
    -
    -<br/><br/>
    -
    -Force valid options (forceValidOption="true")
    -<br/>
    -<sx:autocompleter
    -    id="auto4"
    -    name="auto4"
    -    href="%{#jsonList}" 
    -    cssStyle="width: 200px;" 
    -    forceValidOption="true"/>
    -
    -<br/>
    -<br/>
    -
    -Make dropdown's height to 180px  (dropdownHeight="180")
    -<br/>
    -<sx:autocompleter
    -    id="auto5"
    -    name="auto5"
    -    href="%{#jsonList}"
    -    cssStyle="width: 200px;" 
    -    dropdownHeight="180"/>
    -
    -<br/>
    -<br/>
    -
    -Disabled combobox (disabled="true")
    -<br/>
    -<sx:autocompleter
    -    id="auto6"
    -    name="auto6"
    -    href="%{#jsonList}"
    -    cssStyle="width: 200px;" 
    -    disabled="true"/>
    -
    -<br/>
    -<br/>
    -
    -
    -<s:url var="autoex" action="AutocompleterExample" namespace="/nodecorate"/>
    -
    -Link two autocompleter elements. When the selected value in 'Autocompleter 1' changes, the available values in 'Autocompleter 2' will change also.
    -<br/>
    -<form id="selectForm">
    -  <p>
    -    Autocompleter 1 
    -    <sx:autocompleter  
    -        id="auto7"
    -        name="select"
    -        list="{'fruits','colors'}"
    -        value="colors"
    -        valueNotifyTopics="/Changed"
    -        forceValidOption="true"/>
    -  </p>
    -</form>
    -Autocompleter 2 
    -<sx:autocompleter
    -     id="auto8"
    -     name="auto8"
    -     href="%{#autoex}"
    -     autoComplete="false"
    -     formId="selectForm"
    -     listenTopics="/Changed"
    -     forceValidOption="true" />
    -
    -<br/><br/>
    -
    -Publish before/after/value notify topics
    -<br/>
    -<sx:autocompleter 
    -    id="auto9"
    -    name="auto9"
    -    href="%{#jsonList}"
    -    listenTopics="/reload"
    -    beforeNotifyTopics="/before"
    -    afterNotifyTopics="/after"
    -    valueNotifyTopics="/value"
    -    cssStyle="width: 200px;" />
    -<s:submit theme="simple" value="Reload Values" onclick="dojo.event.topic.publish('/reload')"/>
    -
    -<br/><br/>
    -
    -Get values using JavaScript
    -<br/>
    -<sx:autocompleter  href="%{#jsonList}"  id="jsauto" name="state"/>
    -<s:submit theme="simple" value="Show Key" onclick="showKey()"/>
    -<s:submit theme="simple" value="Show Value" onclick="showValue()"/>
    -
    -<br/><br/>
    -
    -<s:include value="../footer.jsp"/>
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/bind/index.jsp+0 61 removed
    @@ -1,61 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<html>
    -<head>
    -    <title>Bind Examples</title>
    -    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
    -</head>
    -
    -<script type="text/javascript">
    -   dojo.event.topic.subscribe("/before", function(event, widget){
    -      alert('inside a topic event. before request');
    -      //event: set event.cancel = true, to cancel request
    -      //widget: widget that published the topic
    -   });
    -   
    -   dojo.event.topic.subscribe("/after", function(data, request, widget){
    -      alert('inside a topic event. after request');
    -      //data : text returned from request
    -      //request: XMLHttpRequest object
    -      //widget: widget that published the topic
    -   });
    -</script>
    -
    -<body>
    -
    -<div id="div1">Div 1</div>
    -<s:url var="ajaxTest" value="/AjaxTest.action" />
    -
    -
    -<br/><br/>
    -<p>
    -    1. Attach to "onclick" event on button. Update content of Div 1. Use with indicator.
    -    <img id="indicator" src="${pageContext.request.contextPath}/images/indicator.gif" alt="Loading..." style="display:none"/>
    -    <sx:bind href="%{#ajaxTest}" sources="button" targets="div1" events="onclick" indicator="indicator" />
    -     <br/>
    -    <s:submit theme="simple" type="submit" value="submit" id="button"/>
    -</p>
    -<br/><br/>
    -<p>
    -    2. Attach to "onmouseover", and "onclick" event on Area below and update content of Div1, highlight targets with green color
    -    <sx:bind id="ex2" href="%{#ajaxTest}" sources="div2" targets="div1" events="onmouseover,onclick" highlightColor="green"/>
    -    <div id="div2" style="width: 300px; height: 50px; border: 1px solid black">
    -        Mouse Over or Click Here!
    -    </div>
    -</p>
    -<br/><br/>
    -<p>
    -    3. Attach to "onkeydown" event on Textbox below update content of Div1. Publish topics.
    -    <sx:bind id="ex4" href="%{#ajaxTest}" sources="txt1" targets="div1" events="onkeydown" beforeNotifyTopics="/before" afterNotifyTopics="/after" />
    -    <br/>
    -    <s:textfield id="txt1"/>
    -</p>
    -
    -
    -<br/><br/>
    -<s:include value="../footer.jsp"/>
    -
    -</body>
    -</html>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/commonInclude.jsp+0 5 removed
    @@ -1,5 +0,0 @@
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -<!--// START SNIPPET: common-include-->
    -<sx:head cache="false"/>
    -<!--// END SNIPPET: common-include-->
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/footer.jsp+0 8 removed
    @@ -1,8 +0,0 @@
    -<%@taglib prefix="s" uri="/struts-tags" %>
    -
    -<hr/>
    -
    -<s:url var="backToAjaxExamples" value="/ajax/index.html" />
    -
    -<s:a href="%{backToAjaxExamples}">Back To AJAX Examples</s:a>&nbsp;
    -
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/options.ftl+0 5 removed
    @@ -1,5 +0,0 @@
    -[
    -<#list options as option>
    -	["${option?html}"],
    -</#list>
    -]
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/remotebutton/index.jsp+0 70 removed
    @@ -1,70 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<html>
    -<head>
    -    <title>Ajax Examples</title>
    -    <jsp:include page="/WEB-INF/ajax/commonInclude.jsplude.jsp"/>
    -</head>
    -
    -<script type="text/javascript">
    -   function before() {alert("before request");}
    -   function after() {alert("after request");}
    -   function handler(widget, node) {
    -     alert('I will handle this myself!');
    -     dojo.byId(widget.targetsArray[0]).innerHTML = "Done";
    -   }
    -
    -    dojo.event.topic.subscribe("/alltopics", function(data, type, e){
    -      alert('inside a topic event. type='+type);
    -      //data : text returned
    -      //type : "before", "load" or "error"
    -      //e    : request object
    -   });
    -</script>
    -
    -<body>
    -
    -<div id="t1">Div 1</div>
    -<s:url var="ajaxTest" value="/AjaxTest.action" />
    -
    -<br/><br/>
    -
    -A submit button, that highlights (blue color) its targets
    -<sx:submit type="submit" value="submit" targets="t1" href="%{ajaxTest}" highlightColor="blue"/>
    -
    -<br/><br/>
    -
    -A submit button, with an indicator
    -<img id="indicator" src="${pageContext.request.contextPath}/images/indicator.gif" alt="Loading..." style="display:none"/>
    -<sx:submit id="submit2" type="submit" value="submit" targets="t1" href="%{ajaxTest}" indicator="indicator"/>
    -
    -<br/><br/>
    -
    -A submit button, with "notifyTopics"
    -<sx:submit type="submit" value="submit" targets="t1" href="%{ajaxTest}" notifyTopics="/alltopics"/>
    -
    -<br/><br/>
    -
    -Use an image as submit
    -<s:url value="/images/struts-power.gif" var="imgUrl" />
    -<sx:submit type="image" label="Alt Text" targets="t1"
    -  src="%{imgUrl}" href="%{ajaxTest}" />
    -<br/><br/>
    -
    -<label for="textInput">Text to be echoed</label>
    -<br/><br/>
    -
    -Use a button as submit (custom text)
    -<s:form id="form" action="AjaxTest">
    -  <input type=textbox name="data">
    -  <sx:submit type="button" label="Update Content" targets="t1"  id="ajaxbtn"/>
    -</s:form>
    -
    -<br/><br/>
    -
    -<s:include value="../footer.jsp"/>
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example10.jsp+0 31 removed
    @@ -1,31 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<html>
    -<head>
    -    <title>Ajax Examples</title>
    -    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
    -</head>
    -
    -<script type="text/javascript">
    -   function handler(widget, node) {
    -     alert('I will handle this myself!');
    -	 node.innerHTML = "Done";
    -   }
    -</script>
    -
    -<s:url var="ajaxTest" value="/AjaxTest.action" />
    -
    -<body>
    -<sx:div
    -        id="once"
    -        cssStyle="border: 1px solid yellow;"
    -        href="%{ajaxTest}"
    -		handler="handler">
    -    Initial Content</sx:div>
    -
    -<s:include value="../footer.jsp"/>
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example1.jsp+0 23 removed
    @@ -1,23 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<html>
    -<head>
    -    <title>Ajax Examples</title>
    -    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
    -</head>
    -
    -<s:url var="ajaxTest" value="/AjaxTest.action" />
    -
    -
    -<body>
    -<sx:div
    -        cssStyle="border: 1px solid yellow;"
    -        href="%{ajaxTest}">
    -    Initial Content</sx:div>
    -
    -<s:include value="../footer.jsp"/>
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example2.jsp+0 28 removed
    @@ -1,28 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<html>
    -<head>
    -    <title>Ajax Examples</title>
    -    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
    -</head>
    -
    -
    -<body>
    -<s:url var="ajaxTest" value="/AjaxTest.action" />
    -
    -
    -<sx:div
    -        id="once"
    -        cssStyle="border: 1px solid yellow;"
    -        href="%{#ajaxTest}"
    -        updateFreq="2000"
    -        indicator="indicator"
    -		>
    -    Initial Content</sx:div>
    -<img id="indicator" src="${pageContext.request.contextPath}/images/indicator.gif" alt="Loading..." style="display:none"/>
    -<s:include value="../footer.jsp"/>
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example3.jsp+0 27 removed
    @@ -1,27 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<html>
    -<head>
    -    <title>Ajax Examples</title>
    -    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
    -</head>
    -
    -<body>
    -
    -<s:url var="ajaxTest" value="/AjaxTest.action" />
    -
    -
    -<sx:div
    -        id="twoseconds"
    -        cssStyle="border: 1px solid yellow;"
    -        href="%{ajaxTest}"
    -        delay="2000"
    -        updateFreq="%{#parameters.period}"
    -        errorText="There was an error">Initial Content</sx:div>
    -
    -<s:include value="../footer.jsp"/>
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example4.jsp+0 28 removed
    @@ -1,28 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<html>
    -<head>
    -    <title>Ajax Examples</title>
    -    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
    -</head>
    -
    -<body>
    -
    -<s:url var="ajaxTest" value="/AjaxTest.action" />
    -
    -<sx:div
    -        id="fiveseconds"
    -        cssStyle="border: 1px solid yellow;"
    -        href="%{ajaxTest}"
    -        delay="1000"
    -        updateFreq="5000"
    -        errorText="There was an error"
    -        loadingText="reloading"
    -        showLoadingText="true">loading now</sx:div>
    -
    -<s:include value="../footer.jsp"/>
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example5.jsp+0 27 removed
    @@ -1,27 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<html>
    -<head>
    -    <title>Ajax Examples</title>
    -    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
    -</head>
    -
    -<body>
    -
    -<s:url var="ajaxNoUrl" value="/AjaxNoUrl.jsp" />
    -
    -<sx:div
    -        id="error"
    -        cssStyle="border: 1px solid yellow;"
    -        href="/AjaxNoUrl.jsp"
    -        delay="1000"
    -        errorText="Could not contact server"
    -        loadingText="reloading">loading now</sx:div>
    -
    -
    -<s:include value="../footer.jsp"/>
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example6.jsp+0 24 removed
    @@ -1,24 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<html>
    -<head>
    -    <title>Ajax Examples</title>
    -    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
    -</head>
    -
    -<body>
    -
    -<sx:div
    -        id="error"
    -        cssStyle="border: 1px solid yellow;"
    -        href="/AjaxNoUrl.jsp"
    -        delay="1000"
    -        showErrorTransportText="true"
    -        loadingText="reloading">loading now</sx:div>
    -
    -<s:include value="../footer.jsp"/>
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example7.jsp+0 27 removed
    @@ -1,27 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<html>
    -<head>
    -    <title>Ajax Examples</title>
    -    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
    -</head>
    -
    -<body>
    -
    -<s:url var="test3" value="/Test3.action" />
    -
    -
    -<sx:div
    -        id="error"
    -        cssStyle="border: 1px solid yellow;"
    -        href="%{test3}"
    -        delay="1000"
    -		executeScripts="true"
    -        loadingText="reloading">loading now</sx:div>
    -
    -<s:include value="../footer.jsp"/>
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example8.jsp+0 57 removed
    @@ -1,57 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<html>
    -<head>
    -    <title>Ajax Examples</title>
    -    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
    -</head>
    -
    -<body>
    -
    -<script>
    -	var controller = {
    -		refresh : function() {},
    -		start : function() {},
    -		stop : function() {}
    -	};
    -
    -
    -	dojo.event.topic.registerPublisher("/refresh", controller, "refresh");
    -	dojo.event.topic.registerPublisher("/startTimer", controller, "start");
    -	dojo.event.topic.registerPublisher("/stopTimer", controller, "stop");
    -
    -</script>
    -<form id="form">
    -	<label for="textInput">Text to be echoed</label>
    -	<input type=textbox id="textInput" name="data">
    -</form>
    -
    -<br/><br/>
    -
    -<input type=button value="refresh" onclick="controller.refresh()">
    -<input type=button value="stop timer" onclick="controller.stop()">
    -<input type=button value="start timer" onclick="controller.start()">
    -
    -<s:url var="ajaxTest" value="/AjaxTest.action" />
    -
    -<sx:div
    -        id="once"
    -        cssStyle="border: 1px solid yellow;"
    -        href="%{ajaxTest}"
    -        loadingText="Loading..."
    -		listenTopics="/refresh"
    -		startTimerListenTopics="/startTimer"
    -		stopTimerListenTopics="/stopTimer"
    -		updateFreq="3000"
    -		autoStart="true"
    -        highlightColor="red"
    -		formId="form"
    -		>
    -    Initial Content</sx:div>
    -
    -<s:include value="../footer.jsp"/>
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/example9.jsp+0 63 removed
    @@ -1,63 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<html>
    -<head>
    -    <title>Ajax Examples</title>
    -    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
    -</head>
    -
    -<body>
    -
    -<script>
    -	var controller = {
    -		refresh : function() {},
    -		start : function() {},
    -		stop : function() {}
    -	};
    -
    -	dojo.event.topic.registerPublisher("/refresh", controller, "refresh");
    -	dojo.event.topic.registerPublisher("/startTimer", controller, "start");
    -	dojo.event.topic.registerPublisher("/stopTimer", controller, "stop");
    -
    -    dojo.event.topic.subscribe("/before", function(data, type, e){
    -      alert('inside a topic event. before request');
    -      //data : source element id
    -      //type : "before" 
    -      //e    : request object
    -    });
    -    
    -    dojo.event.topic.subscribe("/after", function(data, type, e){
    -      alert('inside a topic event. after request');
    -      //data : text returned
    -      //type : "load" 
    -      //e    : undefined
    -    });
    -
    -</script>
    -
    -<input type=button value="refresh" onclick="controller.refresh()">
    -<input type=button value="start timer" onclick="controller.start()">
    -<input type=button value="stop timer" onclick="controller.stop()">
    -
    -<s:url var="ajaxTest" value="/AjaxTest.action" />
    -
    -<sx:div
    -        id="div1"
    -        cssStyle="border: 1px solid yellow;"
    -        href="%{ajaxTest}"
    -        listenTopics="/refresh"
    -		startTimerListenTopics="/startTimer"
    -		stopTimerListenTopics="/stopTimer"
    -		updateFreq="10000"
    -		autoStart="false"
    -        beforeNotifyTopics="/before"
    -        afterNotifyTopics="/after"
    -		>
    -    Initial Content</sx:div>
    -
    -<s:include value="../footer.jsp"/>
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/remotediv/index.jsp+0 55 removed
    @@ -1,55 +0,0 @@
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<html>
    -<head>
    -    <title>AJAX-based remote DIV tag</title>
    -    <%@ include file="/WEB-INF/ajax/commonInclude.jsp" %>
    -</head>
    -
    -<body>
    -
    -<h2>Examples</h2>
    -
    -<p>
    -    <ol>
    -        <li>
    -            <a href="example1.jsp">A simple DIV that refreshes only once</a>
    -        </li>
    -
    -		<li>
    -            <a href="example10.jsp">A simple DIV that uses a custom handler</a>
    -        </li>
    -
    -        <li>
    -            <a href="example2.jsp?url=/AjaxTest.action">A simple DIV that updates every 2 seconds, with indicator</a>
    -        </li>
    -
    -        <li>
    -            <a href="example4.jsp">A simple DIV that updates every 5 seconds with loading text and reloading text and delay</a>
    -        </li>
    -
    -        <li>
    -            <a href="example5.jsp">A simple DIV's that cannot contact the server, with fixed error message</a>
    -        </li>
    -
    -
    -        <li>
    -            <a href="example7.jsp">A div that calls the server, and JS in the resulting page is executed</a>
    -        </li>
    -
    -        <li>
    -            <a href="example8.jsp">A div that will listen to events to refresh and start/stop autoupdate, and gets highlighted in red (when it loads)</a>
    -        </li>
    -
    -		<li>
    -            <a href="example9.jsp">A div that will listen to events to refresh and start/stop autoupdate, publish notifyTopics</a>
    -        </li>
    -
    -    </ol>
    -
    -
    -</p>
    -
    -<s:include value="../footer.jsp"/>
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/remoteforms/index.jsp+0 119 removed
    @@ -1,119 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<html>
    -<head>
    -    <title>Ajax Examples</title>
    -    <sx:head />
    -
    -    <script language="JavaScript" type="text/javascript">
    -        dojo.event.topic.subscribe("/beforeSubmit", function(event, widget) {
    -            alert('you can manipulate the form before it gets submitted. To cancel the submit event set event.cancel=true');
    -            event.cancel = true;
    -        });
    -    </script>
    -
    -</head>
    -
    -<body>
    -
    -<div id='two' style="border: 1px solid yellow;"><b>initial content</b></div>
    -
    -
    -<br /><br />
    -Remote form replacing another div:<br/>
    -<s:form
    -        id='theForm2'
    -        cssStyle="border: 1px solid green;"
    -        action='AjaxRemoteForm'
    -        method='post'>
    -
    -    <input type='text' name='data' value='Struts User'>
    -
    -    <sx:submit value="GO2" targets="two"/>
    -
    -</s:form>
    -
    -<br /><br />
    -Remote form replacing the forms content:<br/>
    -<s:form
    -        id='theForm3'
    -        cssStyle="border: 1px solid green;"
    -        action='AjaxRemoteForm'
    -        method='post'>
    -
    -    <input type='text' name='data' value='Struts User'>
    -
    -    <sx:submit value="GO3" targets="theForm3"/>
    -
    -</s:form>
    -
    -<br /><br />
    -Remote form evaluating suplied JS on completion:<br/>
    -<s:form
    -        id='theForm4'
    -        cssStyle="border: 1px solid green;"
    -        action='Test3'
    -        method='post'>
    -
    -    <input type='text' name='data' value='Struts User'>
    -
    -    <sx:submit value="GO4" executeScripts="true"/>
    -
    -</s:form>
    -
    -<br /><br />
    -Submit outside form:<br/>
    -<s:form
    -        id='theForm5'
    -        cssStyle="border: 1px solid green;"
    -        action='AjaxRemoteForm'
    -        method='post'>
    -
    -    <input type='text' name='data' value='Struts User'>
    -</s:form>
    -<sx:submit value="GO5" formId="theForm5" targets="two"/>
    -
    -<br /><br />
    -<s:url var="remoteUrl" namespace="/remoteforms" action="AjaxRemoteForm"/>
    -Submit outside form, href in submit tag:<br/>
    -<s:form
    -        id='theForm6'
    -        cssStyle="border: 1px solid green;"
    -        method='post'>
    -
    -    <input type='text' name='data' value='Struts User'>
    -</s:form>
    -<sx:submit value="GO6" formId="theForm6" targets="two" href="%{#remoteUrl}"/>
    -
    -<br /><br />
    -Remote form whose submit is cancelled:<br/>
    -<s:form
    -        id='theForm7'
    -        cssStyle="border: 1px solid green;"
    -        action='AjaxRemoteForm'
    -        method='post'>
    -
    -    <input type='text' name='data' value='Struts User'>
    -
    -    <sx:submit value="GO7" targets="theForm7" beforeNotifyTopics="/beforeSubmit"/>
    -
    -</s:form>
    -
    -<br /><br />
    -A form with no remote submit (so should not be ajaxified):<br/>
    -<s:form
    -        id='theForm8'
    -        cssStyle="border: 1px solid green;"
    -        action='AjaxRemoteForm'
    -        method='post'>
    -
    -    <input type='text' name='data' value='Struts User'>
    -
    -    <s:submit value="Go AWAY"  />
    -
    -</s:form>
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/remotelink/index.jsp+0 127 removed
    @@ -1,127 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<html>
    -<head>
    -    <title>Ajax Examples</title>
    -    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
    -</head>
    -
    -<script type="text/javascript">
    -   function handler(widget, node) {
    -     alert('I will handle this myself!');
    -	 dojo.byId(widget.targetsArray[0]).innerHTML = "Done";
    -   }
    -
    -   dojo.event.topic.subscribe("/before", function(event, widget){
    -      alert('inside a topic event. before request');
    -      //event: set event.cancel = true, to cancel request
    -      //widget: widget that published the topic
    -   });
    -   
    -   dojo.event.topic.subscribe("/after", function(data, request, widget){
    -      alert('inside a topic event. after request');
    -      //data : text returned from request
    -      //request: XMLHttpRequest object
    -      //widget: widget that published the topic
    -   });
    -   
    -   dojo.event.topic.subscribe("/error", function(error, request, widget){
    -      alert('inside a topic event. on error');
    -      //error : error object (error.message has the error message)
    -      //request: XMLHttpRequest object
    -      //widget: widget that published the topic
    -   });
    -   
    -   dojo.event.topic.subscribe("/topics", function(data, type, e){
    -      alert('inside a topic event. type='+type);
    -      //data : text returned
    -      //type : "before", "load", "error"
    -      //e    : request object
    -   });
    -</script>
    -
    -<body>
    -
    -<div id="t1">Div 1</div>
    -
    -<br/>
    -
    -<div id="t2">Div 2</div>
    -
    -<br/><br/>
    -
    -<s:url var="ajaxTest" value="/AjaxTest.action" />
    -<s:url var="test3" value="/Test3.action" />
    -
    -<sx:a  
    -        href="%{#ajaxTest}"
    -        targets="t1"
    -        highlightColor="red"
    -        highlightDuration="2000">Update 'Div 1' and use red highligh to notify user of changed content</sx:a>
    -
    -<br/><br/>
    -
    -<sx:a   id="link1"
    -        href="%{#ajaxTest}"
    -        indicator="indicator"
    -		targets="t1,t2" 
    -        beforeNotifyTopics="/before"
    -        afterNotifyTopics="/after" >Update 'Div 1' and 'Div 2', publish topic '/before' and '/after', use indicator</sx:a>
    -<img id="indicator" src="${pageContext.request.contextPath}/images/indicator.gif" alt="Loading..." style="display:none"/>
    -
    -<br/><br/>
    -
    -<sx:a  id="link2"
    -        href="/AjaxNoUrl.jsp"
    -		errorText="Error Loading"
    -		targets="t1"
    -        errorNotifyTopics="/error">Try to update 'Div 1', publish '/error', use custom error message</sx:a>
    -
    -<br/><br/>
    -
    -<sx:a  id="link3"
    -        href="%{#ajaxTest}"
    -		loadingText="Loading!!!"
    -        showLoadingText="true"
    -		targets="t1">Update 'Div 1', use custom loading message</sx:a>
    -
    -<br/><br/>
    -
    -<sx:a  id="link4"
    -        href="%{#test3}"
    -		executeScripts="true"
    -		targets="t2">Update 'Div 2' and execute returned javascript </sx:a>
    -
    -<br/><br/>
    -
    -<sx:a  id="link5"
    -        href="%{#ajaxTest}"
    -		handler="handler"
    -		targets="t2">Update 'Div 2' using a custom handler </sx:a>
    -
    -
    -<br/><br/>
    -
    -<label for="textInput">Text to be echoed</label>
    -
    -<form id="form">
    -  <input type=textbox name="data">
    -</form>
    -
    -<br/><br/>
    -
    -<sx:a  id="link6"
    -        href="%{#ajaxTest}"
    -		targets="t2"
    -		formId="form"
    -		>Update 'Div 2' with the content of the textbox </sx:a>
    -
    -
    -<br/><br/>
    -
    -<s:include value="../footer.jsp"/>
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example1.jsp+0 95 removed
    @@ -1,95 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    - 
    -<html>
    -<head>
    -    <title>Ajax examples - tabbled panel</title>
    -
    -    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
    -</head>
    -
    -<s:url var="ajaxTest" value="/AjaxTest.action" />
    -
    -<body>
    -
    -    <table cellpadding="0" cellspacing="10" border="0" width="900">
    -        <tr>
    -            <td align="top" width="400">
    -                <sx:tabbedpanel id="test" >
    -                    <sx:div id="one" label="one" >
    -                        This is the first pane<br/>
    -                        <s:form>
    -                            <s:textfield name="tt" label="Test Text"/>  <br/>
    -                            <s:textfield name="tt2" label="Test Text2"/>
    -                        </s:form>
    -                    </sx:div>
    -                    <sx:div id="two" label="two" >
    -                        This is the second panel
    -                    </sx:div>
    -                    <sx:div id="three" label="three" >
    -                        This is the three
    -                    </sx:div>
    -                </sx:tabbedpanel>
    -            </td>
    -            <td align="top">
    -                <sx:tabbedpanel id="test2" >
    -                    <sx:div id="left" label="left" >
    -                        This is the left pane<br/>
    -                        <s:form>
    -                            <s:textfield name="tt" label="Test Text"/>  <br/>
    -                            <s:textfield name="tt2" label="Test Text2"/>
    -                        </s:form>
    -                    </sx:div>
    -                    <sx:div href="%{ajaxTest}" id="ryh1" 
    -                                    label="remote one"></sx:div>
    -                    <sx:div id="middle" label="middle" >
    -                        middle tab<br/>
    -                        <s:form>
    -                            <s:textfield name="tt" label="Test Text44"/>  <br/>
    -                            <s:textfield name="tt2" label="Test Text442"/>
    -                        </s:form>
    -                    </sx:div>
    -                    <sx:div  href="%{ajaxTest}" id="ryh21"  label="remote right"/>
    -                </sx:tabbedpanel>
    -            </td>
    -        </tr>
    -        <tr>
    -            <td align="top">
    -                <sx:tabbedpanel id="testremote">
    -                    <sx:div  href="%{ajaxTest}" id="r1"  label="remote one">
    -                        <s:action name="AjaxTest" executeResult="true" />
    -                    </sx:div>
    -                    <sx:div  href="%{ajaxTest}" id="r2"  label="remote two"></sx:div>
    -                    <sx:div  href="%{ajaxTest}" id="r3"  label="remote three"></sx:div>
    -                </sx:tabbedpanel>
    -            </td>
    -            <td align="top">
    -                <sx:tabbedpanel id="test3" >
    -                    <sx:tabbedpanel id="test11" label="Container 1">
    -                        <sx:div id="i11" label="inner 1 one">Inner 1</sx:div>
    -                        <sx:div id="112" label="inner 1 two">Inner 2</sx:div>
    -                        <sx:div id="i13" label="inner 1 three">Inner 3</sx:div>
    -                    </sx:tabbedpanel>
    -                   
    -                    <sx:tabbedpanel id="test12" label="Container 2">
    -                        <sx:div id="i21" label="inner 2 one" >Inner 21</sx:div>
    -                        <sx:div id="122" label="inner 2 two" >Inner 22</sx:div>
    -                        <sx:div id="i23" label="inner 2 three" >Inner 23</sx:div>
    -                    </sx:tabbedpanel>
    -                    
    -                    <sx:tabbedpanel id="test13" label="Container 3">
    -                        <sx:div id="i31" label="inner 3 one" >Inner 31</sx:div>
    -                        <sx:div id="132" label="inner 3 two" >Inner 32</sx:div>
    -                        <sx:div id="i33" label="inner 3 three" >Inner 33</sx:div>
    -                    </sx:tabbedpanel>
    -                </sx:tabbedpanel>
    -            </td>
    -        </tr>
    -    </table>
    -
    -<s:include value="../footer.jsp"/>
    -
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example2.jsp+0 26 removed
    @@ -1,26 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<html>
    -<head>
    -    <title>Ajax examples - tabbled panel</title>
    -
    -    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
    -</head>
    -
    -<body>
    -
    -    <sx:tabbedpanel id="test2" cssStyle="width: 500px; height: 300px;" doLayout="true">
    -        <sx:div label="test1"  >
    -          I'm a Tab!!!
    -        </sx:div >
    -        <sx:div  id="middle" label="test2"   >
    -          I'm the other Tab!!!
    -        </sx:div >
    -    </sx:tabbedpanel>
    -				  
    -<s:include value="../footer.jsp"/>
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example3.jsp+0 46 removed
    @@ -1,46 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<html>
    -<head>
    -    <title>Ajax examples - tabbled panel</title>
    -
    -    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
    -</head>
    -
    -<s:url var="ajaxTest" value="/AjaxTest.action" />
    -
    -<body>
    -
    -    <table cellpadding="0" cellspacing="10" border="0" width="600">
    -        <tr>
    -            <td align="top">
    -                <!--// START SNIPPET: tabbedpanel-tag-->
    -                <sx:tabbedpanel id="test2" cssStyle="width: 500px; height: 300px;" doLayout="true">
    -                      <sx:div id="left" label="left">
    -                          This is the left pane<br/>
    -                          <s:form >
    -                              <s:textfield name="tt" label="Test Text" />  <br/>
    -                              <s:textfield name="tt2" label="Test Text2" />
    -                          </s:form>
    -                      </sx:div>
    -                      <sx:div href="%{ajaxTest}" id="ryh1" label="remote one" preload="false"/>
    -                      <sx:div id="middle" label="middle">
    -                          middle tab<br/>
    -                          <s:form >
    -                              <s:textfield name="tt" label="Test Text44" />  <br/>
    -                              <s:textfield name="tt2" label="Test Text442" />
    -                          </s:form>
    -                      </sx:div>
    -                      <sx:div href="%{ajaxTest}"  id="ryh21" label="remote right" preload="false"/>
    -                  </sx:tabbedpanel>
    -                <!--// END SNIPPET: tabbedpanel-tag-->
    -             </td>
    -        </tr>
    -    </table>
    -
    -<s:include value="../footer.jsp"/>
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example4.jsp+0 57 removed
    @@ -1,57 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<html>
    -<head>
    -    <title>Ajax examples - tabbled panel</title>
    -
    -    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
    -</head>
    -
    -<script>
    -    function enableTab(id) {
    -      var tabContainer = dojo.widget.byId('tabContainer');
    -      tabContainer.enableTab(id);
    -    }
    -    
    -    function disableTab(index) {
    -      var tabContainer = dojo.widget.byId('tabContainer');
    -      tabContainer.disableTab(index);
    -    }
    -</script>
    -
    -<body>
    -    
    -    <sx:tabbedpanel id="tabContainer" cssStyle="width: 500px; height: 300px;" doLayout="true">
    -          <sx:div id="tab1" label="test1"  >
    -              Enabled Tab
    -          </sx:div >
    -          <sx:div  id="tab2" label="test2"  disabled="true" >
    -              Diabled Tab
    -          </sx:div >
    -           <sx:div  id="tab3" label="test3" >
    -              Some other Tab
    -          </sx:div >
    -      </sx:tabbedpanel>
    -
    -    <br />
    -    
    -    <input type="button" onclick="enableTab(1)" value="Enable Tab 2 using Index" />
    -    <input type="button" onclick="disableTab(1)" value="Disable Tab 2 using Index" />
    -    
    -    <br />
    -    
    -    <input type="button" onclick="enableTab('tab2')" value="Enable Tab 2 using Id" />
    -    <input type="button" onclick="disableTab('tab2')" value="Disable Tab 2 using Id" />
    -    
    -    <br />
    -    
    -    <input type="button" onclick="enableTab(dojo.widget.byId('tab2'))" value="Enable Tab 2 using widget" />
    -    <input type="button" onclick="disableTab(dojo.widget.byId('tab2'))" value="Disable Tab 2 using widget" />
    -
    -<br /> <br />     
    -<s:include value="../footer.jsp"/>
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example5.jsp+0 29 removed
    @@ -1,29 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<html>
    -<head>
    -    <title>Ajax examples - tabbled panel</title>
    -
    -    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
    -</head>
    -
    -<body>
    -
    -				<sx:tabbedpanel id="test2" cssStyle="width: 500px; height: 300px;" doLayout="true" labelposition="bottom">
    -                      <sx:div id="left" label="test1" closable="true">
    -                          I'm a Tab!!!
    -                      </sx:div >
    -                      <sx:div  id="middle" label="test2"  closable="true">
    -                          I'm the other Tab!!!
    -                      </sx:div >
    -                     
    -                  </sx:tabbedpanel>
    -				  
    -				
    -
    -<s:include value="../footer.jsp"/>
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example5Ok.jsp+0 9 removed
    @@ -1,9 +0,0 @@
    -<%@ page language="java" contentType="text/html; charset=UTF-8"
    -    pageEncoding="UTF-8"%>
    -<%@taglib prefix="s" uri="/struts-tags" %>
    -    
    -<h1>OK</h1>    
    -<s:property value="name" /><br/>
    -<s:property value="age" /><br/>
    -    
    -    
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/example6.jsp+0 40 removed
    @@ -1,40 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<html>
    -<head>
    -    <title>Ajax examples - tabbled panel</title>
    -
    -    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
    -</head>
    -
    -<script>
    -    dojo.event.topic.subscribe('/before', function(event, tab, tabContainer) {
    -      alert("Before selecting tab. Set 'event.cancel=true' to prevent selection");
    -    });
    -    dojo.event.topic.subscribe('/after', function(tab, tabContainer) {
    -      alert("After tab was selected");
    -    });
    -</script>
    -<body>
    -    
    -<sx:tabbedpanel 
    -    id="tabContainer"
    -    cssStyle="width: 500px; height: 300px;" 
    -    doLayout="true"
    -    beforeSelectTabNotifyTopics="/before"
    -    afterSelectTabNotifyTopics="/after">
    -  <sx:div id="tab1" label="test1"  >
    -      Tab 1
    -  </sx:div >
    -  <sx:div  id="tab2" label="test2" >
    -      Tab 2
    -  </sx:div >
    -</sx:tabbedpanel>
    -
    -<br /><br />    
    -<s:include value="../footer.jsp"/>
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/index.jsp+0 28 removed
    @@ -1,28 +0,0 @@
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<html>
    -<head>
    -    <title>Tabbed Panes</title>
    -    <%@ include file="/WEB-INF/ajax/commonInclude.jsp" %>
    -</head>
    -
    -<body>
    -
    -<h2>Examples</h2>
    -
    -<p>
    -    <ol>
    -        <li><a href="example2.jsp">A local tabbed panel width fixed size (doLayout="true")</a></li>
    -        <li><a href="example4.jsp">A Local tabbed panel with disabled tabs</a></li>
    -        <li><a href="example6.jsp">A Local tabbed panel that publishes topics when tabs are selected(before and after)</a></li>
    -        <li><a href="example3.jsp">A remote (href != "") and local tabbed panel</a></li>
    -        <li><a href="example1.jsp">Various remote and local tabbed panels (with enclosed tabbed pannels) with layout (doLayout="false")</a></li>
    -        <li><a href="example5.jsp">A local tabbed panel width fixed size (doLayout="true") with close button on the tab pane (closable="true" on tabs), and tabs on the bottom (labelposition="bottom")</a></li>
    -    </ol>
    -
    -
    -</p>
    -
    -<s:include value="../footer.jsp"/>
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel1.ftl+0 3 removed
    @@ -1,3 +0,0 @@
    -
    -Hello, <br/>
    -Today is ${todayDate?html}, the time now is ${todayTime?html}
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel2.ftl+0 7 removed
    @@ -1,7 +0,0 @@
    -
    -<div id="result">
    -</div>
    -<@sx.form action="panel2Submit" namespace="/nodecorate">
    -	<@s.textfield label="Name" name="name" />
    -	<@sx.submit targets="result" />
    -</@sx.form>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel2Submit.ftl+0 2 removed
    @@ -1,2 +0,0 @@
    -
    -Hello, ${name?html}
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel3.ftl+0 9 removed
    @@ -1,9 +0,0 @@
    -
    -<div id="result">
    -</div>
    -
    -<@s.form action="panel3Submit" namespace="/nodecorate">
    -	<@sx.autocompleter label="Gender" name="gender" list="%{#{'Male':'Male','Female':'Female'}}"  />
    -	<@sx.submit targets="result" />
    -</@s.form>
    -
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/tabbedpanel/nodecorate/panel3Submit.ftl+0 2 removed
    @@ -1,2 +0,0 @@
    -
    -So, you are a ${gender?html}
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/testjs.jsp+0 14 removed
    @@ -1,14 +0,0 @@
    -<%
    -    request.setAttribute("decorator", "none");
    -    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    -    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    -    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
    -%>
    -
    -<script language="JavaScript" type="text/javascript">
    -    alert('This JavaScript currently being evaluated is in the result...');
    -</script>
    -Show me some text also
    -<script language="JavaScript" type="text/javascript">
    -    alert('And some more text for fun!');
    -</script>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/tree/getCategory.jsp+0 23 removed
    @@ -1,23 +0,0 @@
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@include file="partialChunkHeader.jsp"%>
    -<ul>
    -<s:iterator value="category.children">
    -    <li>
    -        <s:if test="children.size() > 0">
    -            <sx:a href="toggle.action?catId=%{id}">+</sx:a>
    -        </s:if>
    -        <s:property value="name"/>
    -    </li>
    -    <s:if test="toggle">
    -        <s:set name="display" value="'none'"/>
    -    </s:if>
    -    <s:else>
    -        <s:set name="display" value="''"/>
    -    </s:else>                                                                                     ›
    -
    -    <sx:div id="children_%{id}"
    -            cssStyle="display: %{display}"
    -            href="getCategory.action?catId=%{id}"
    -            refreshListenTopic="children_%{id}"/>
    -</s:iterator>
    -</ul>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/tree/partialChunkHeader.jsp+0 6 removed
    @@ -1,6 +0,0 @@
    -<%
    -    request.setAttribute("decorator", "none");
    -    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    -    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    -    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
    -%>
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/tree/toggle.jsp+0 12 removed
    @@ -1,12 +0,0 @@
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@include file="partialChunkHeader.jsp"%>
    -<%
    -    response.setContentType("text/javascript");
    -%>
    -dojo.event.topic.publish("children_<s:property value="category.id"/>");
    -var d = document.getElementById("children_<s:property value="category.id"/>");
    -if (d.style.display != "none") {
    -    d.style.display = "none";
    -} else {
    -    d.style.display = "";
    -}
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/tree/tree.jsp+0 13 removed
    @@ -1,13 +0,0 @@
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<html>
    -<head>
    -    <title>Tree</title>
    -    <sx:head />
    -</head>
    -
    -<body>
    -
    -<s:action name="getCategory" executeResult="true"/>
    -
    -</body>
    -</html>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/ajax/widgets/index.jsp+0 40 removed
    @@ -1,40 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<html>
    -<head>
    -    <title>Ajax Widgets</title>
    -    <jsp:include page="/WEB-INF/ajax/commonInclude.jsp"/>
    -</head>
    -
    -<body>
    -
    -<br/>
    -NOTES:
    -<ul>
    -    <li>Make sure that there is a 'value' attribute in the textarea with the content for the editor</li>
    -    <li>This is experimental</li>
    -</ul>
    -
    -
    -Default Editor configuration:<br/>
    -<s:form id="form1" action="AjaxRemoteForm" method="post">
    -    <sx:textarea name="data" cols="50" rows="10" value="Test Data 1" />
    -    <s:submit value="Submit"/>
    -</s:form>
    -<br/>
    -
    -Configured Editor configuration:<br/>  
    -<s:form id="form2" action="AjaxRemoteForm" method="post">
    -    <sx:textarea id="editor2" name="data" cols="50" rows="10" value="Test Data 2">
    -        <s:param name="editorControls">textGroup;|;justifyGroup;|;listGroup;|;indentGroup</s:param>
    -    </sx:textarea>
    -    <s:submit value="Submit"/>
    -</s:form>
    -<br/>
    -
    -<s:include value="../footer.jsp"/>
    -
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/chat/chatLogin.ftl+0 27 removed
    @@ -1,27 +0,0 @@
    -<html>
    -	<head>
    -		<title>Struts2 Showcase - Chat - Login</title>
    -		<@s.head />
    -	</head>
    -	<body>
    -	<div class="page-header">
    -		<h1>Chat - Login</h1>
    -	</div>
    -
    -	<div class="container-fluid">
    -		<div class="row-fluid">
    -			<div class="span12">
    -			<@s.actionerror cssClass="alert alert-error"/>
    -			<@s.actionmessage cssClass="alert alert-info"/>
    -			<@s.fielderror  cssClass="alert alert-error"/>
    -
    -			<@s.form action="login" namespace="/chat" method="POST">
    -				<@s.textfield name="name" label="Name" required="true" />
    -				<@s.submit cssClass="btn btn-primary"/>
    -			</@s.form>
    -			</div>
    -		</div>
    -	</div>
    -	</body>
    -</html>
    -
    
  • apps/showcase/src/main/webapp/WEB-INF/chat/createRoom.ftl+0 2 removed
    @@ -1,2 +0,0 @@
    -<@s.actionerror />
    -<@s.fielderror />
    
  • apps/showcase/src/main/webapp/WEB-INF/chat/index.jsp+0 3 removed
    @@ -1,3 +0,0 @@
    -
    -<% response.sendRedirect("main.action"); %>
    -
    
  • apps/showcase/src/main/webapp/WEB-INF/chat/messagesAvailableInRoom.ftl+0 33 removed
    @@ -1,33 +0,0 @@
    -
    -<table class="table">
    -<tr class="tableHeader">
    -	<td class="tableSenderColumn">Sender</td>
    -	<td class="tableDateColumn">Date</td>
    -	<td class="tableMessageColumn">Message</td>
    -</tr>
    -<@s.iterator id="message" value="%{messagesAvailableInRoom}" status="stat">
    -<tr class="tableContent">
    -	<#if stat.odd>
    -	<td class="tableSenderColumnOdd"> 
    -	<#else>
    -	<td clas="tableSenderColumnEven">
    -	</#if>
    -		<@s.property value="%{#message.creator.name}" />
    -	</td>
    -	<#if stat.odd>
    -	<td class="tableDateColumnOdd">
    -	<#else>
    -	<td class="tableDateColumnEven">
    -	</#if>
    -		<@s.property value="%{#message.creationDate}" />
    -	</td>
    -	<#if stat.odd>
    -	<td class="tableMessageColumnOdd">
    -	<#else>
    -	<td class="tableMessageColumnEven">
    -	</#if>
    -		<@s.property value="%{#message.message}" />
    -	</td>
    -</tr>
    -</@s.iterator>
    -</table>
    
  • apps/showcase/src/main/webapp/WEB-INF/chat/roomsAvailable.ftl+0 44 removed
    @@ -1,44 +0,0 @@
    -
    -<table class="table">
    -<tr class="tableHeader">
    -	<td>Operation</td>
    -	<td>Name</td>
    -	<td>Description</td>
    -	<td>Date Created</td>
    -</tr>
    -<@s.iterator id="room" value="%{availableRooms}" status="stat">
    -<tr class="tableContent">
    -	<#if stat.isOdd()>
    -	<td class="tableOperationColumnOdd">
    -	<#else>
    -	<td class="tableOperationColumnEven">
    -	</#if>
    -	<@s.url id="url" action="enterRoom" namespace="/chat">
    -		<@s.param name="roomName" value="%{#room.name}" />
    -	</@s.url>
    -	<@s.a href="%{url}">Enter</@s.a>
    -	</td>
    -	<#if stat.odd>
    -	<td class="tableNameColumnOdd">
    -	<#else>
    -	<td class="tableNameColumnEven">
    -	</#if>
    -	<@s.property value="%{#room.name}" />
    -	</td>
    -	<#if stat.odd>
    -	<td class="tableDescriptionColumnOdd">
    -	<#else>
    -	<td class="tableDescriptionColumnEven">
    -	</#if>
    -	<@s.property value="%{#room.description}" />
    -	</td>
    -	<#if stat.odd>
    -	<td class="tableDateCreatedColumnOdd">
    -	<#else>
    -	<td class="tableDateCreateColumnEven">
    -	</#if>
    -	<@s.property value="%{#room.creationDate}" />
    -	</td>
    -</tr>
    -</@s.iterator>
    -</table>
    
  • apps/showcase/src/main/webapp/WEB-INF/chat/roomSelection.ftl+0 172 removed
    @@ -1,172 +0,0 @@
    -<html>
    -<head>
    -	<title>Struts2 Showcase - Chat - Room Selection</title>
    -<@sx.head />
    -	<style type="text/css">
    -		div.box {
    -			border: 1px solid darkblue;
    -			margin: 5px;
    -		}
    -
    -		div.box h3 {
    -			color: white;
    -			background: darkblue;
    -			margin: 3px;
    -			padding: 2px;
    -		}
    -
    -		div.nobox {
    -			margin: 5px;
    -		}
    -
    -		table.table {
    -			border: 1px solid darkblue;
    -			width: 98%;
    -			margin: 5px;
    -		}
    -
    -		table.table tr.tableHeader {
    -			color: white;
    -			background: darkblue;
    -			margin: 3px;
    -			padding: 2px;
    -			font-size: medium;
    -			font-weight: bold;
    -		}
    -
    -		table.table td.tableOperationColumnOdd {
    -			background: gray;
    -			color: white;
    -			width: 20%
    -		}
    -
    -		table.table td.tableNameColumnOdd {
    -			background: gray;
    -			color: white;
    -			width: 20%;
    -		}
    -
    -		table.table td.tableDescriptionColumnOdd {
    -			background: gray;
    -			color: white;
    -			width: 40%;
    -		}
    -
    -		table.table td.tableDateCreatedColumnOdd {
    -			background: gray;
    -			color: white;
    -			width: 20%;
    -		}
    -
    -		table.table td.tableOperationColumnEven {
    -			background: white;
    -			color: gray;
    -			width: 20%
    -		}
    -
    -		table.table td.tableNameColumnEven {
    -			background: white;
    -			color: gray;
    -			width: 20%;
    -		}
    -
    -		table.table td.tableDescriptionColumnEven {
    -			background: white;
    -			color: gray;
    -			width: 40%;
    -		}
    -
    -		table.table td.tableDateCreatedColumnEven {
    -			background: white;
    -			color: gray;
    -			width: 20%;
    -		}
    -
    -		div.container {
    -			margin-left: auto;
    -			margin-right: auto;
    -			width: 100%;
    -		}
    -
    -		div.left {
    -			width: 20%;
    -			float: left;
    -		}
    -
    -		div.right {
    -			width: 20%;
    -			float: right;
    -		}
    -
    -		div.center {
    -			width: 60%;
    -			float: left;
    -		}
    -
    -	</style>
    -</head>
    -<body>
    -<div class="page-header">
    -	<h1>Chat - Room Selection</h1>
    -</div>
    -
    -<div class="container-fluid">
    -	<div class="row-fluid">
    -		<div class="span12 container">
    -
    -
    -			<div class="left">
    -				<div class="box">
    -					<h3>Operations</h3>
    -				<@s.url id="url" action="logout" namespace="/chat" />
    -					<ul>
    -						<li><@s.a href="%{#url}">Logout</@s.a></li>
    -					</ul>
    -				</div>
    -			<#if (actionErrors?size gt 0)>
    -				<div class="box">
    -					<h3>Action Errors</h3>
    -					<@s.actionerrors />
    -				</div>
    -			</#if>
    -				<div class="box">
    -					<h3>Users Available In Chat</h3>
    -				<@s.url id="usersAvailableUrl" action="usersAvailable" namespace="/chat/ajax" />
    -				<@sx.div id="usersAvailable" updateFreq="%{@org.apache.struts2.showcase.chat.Constants@UPDATE_FREQ}"
    -				href="%{usersAvailableUrl}"
    -				class="box">
    -					Initial Loading Users ...
    -				</@sx.div>
    -				</div>
    -			</div>
    -
    -
    -			<div class="center">
    -				<div class="box">
    -					<h3>Rooms Available In Chat</h3>
    -				<@s.url id="roomsAvailableUrl" action="roomsAvailable" namespace="/chat/ajax" />
    -				<@sx.div id="roomsAvailable" listenTopics="topicRoomCreated"
    -				updateFreq="%{@org.apache.struts2.showcase.chat.Constants@UPDATE_FREQ}"
    -				href="%{roomsAvailableUrl}" >
    -					Initial Loading Rooms ...
    -				</@sx.div>
    -				</div>
    -
    -				<div id="createRoom" class="box">
    -					<h3>Create Room In Chat</h3>
    -
    -					<div id="createRoomResult"></div>
    -				<@s.form id="createRoomId" action="createRoom" namespace="/chat/ajax" method="POST">
    -					<@s.textfield label="Room Name" required="true" name="name" />
    -					<@s.textarea theme="xhtml" label="Room Description" required="true" name="Description" />
    -					<@sx.submit value="%{'Create Room'}" targets="createRoomResult" afterNotifyTopics="topicRoomCreated" align="left" cssClass="btn btn-primary" />
    -				</@s.form>
    -				</div>
    -			</div>
    -
    -		</div>
    -	</div>
    -</div>
    -</body>
    -</html>
    -
    
  • apps/showcase/src/main/webapp/WEB-INF/chat/sendMessageToRoomResult.ftl+0 2 removed
    @@ -1,2 +0,0 @@
    -
    -<@s.fielderror />
    
  • apps/showcase/src/main/webapp/WEB-INF/chat/showRoom.ftl+0 167 removed
    @@ -1,167 +0,0 @@
    -<html>
    -<head>
    -	<title>Struts2 Showcase - Chat - Show Room </title>
    -<@sx.head />
    -	<style type="text/css">
    -		div.box {
    -			border: 1px solid darkblue;
    -			margin: 5px;
    -		}
    -
    -		div.box h3 {
    -			color: white;
    -			background: darkblue;
    -			margin: 3px;
    -			padding: 2px;
    -		}
    -
    -		div.nobox {
    -			margin: 5px;
    -		}
    -
    -		table.table {
    -			border: 1px solid darkblue;
    -			width: 98%;
    -			margin: 5px;
    -		}
    -
    -		table.table tr.tableHeader {
    -			color: white;
    -			background: darkblue;
    -			margin: 3px;
    -			padding: 2px;
    -			font-size: medium;
    -			font-weight: bold;
    -		}
    -
    -		table.table td.tableSenderColumnOdd {
    -			background: gray;
    -			color: white;
    -			width: 20%
    -		}
    -
    -		table.table td.tableDateColumnOdd {
    -			background: gray;
    -			color: white;
    -			width: 20%;
    -		}
    -
    -		table.table td.tableMessageColumnOdd {
    -			background: gray;
    -			color: white;
    -			width: 60%;
    -		}
    -
    -		table.table td.tableSenderColumnEven {
    -			background: white;
    -			color: gray;
    -			width: 20%
    -		}
    -
    -		table.table td.tableDateColumnEven {
    -			background: white;
    -			color: gray;
    -			width: 20%;
    -		}
    -
    -		table.table td.tableMessageColumnEven {
    -			background: white;
    -			color: gray;
    -			width: 60%;
    -		}
    -
    -		div.container {
    -			margin-left: auto;
    -			margin-right: auto;
    -			width: 100%;
    -		}
    -
    -		div.left {
    -			width: 20%;
    -			float: left;
    -		}
    -
    -		div.right {
    -			width: 20%;
    -			float: left;
    -		}
    -
    -		div.center {
    -			width: 60%;
    -			float: left;
    -		}
    -
    -	</style>
    -</head>
    -<body>
    -<div class="page-header">
    -	<h1>Chat - Show Room</h1>
    -</div>
    -
    -<div class="container-fluid">
    -	<div class="row-fluid">
    -		<div class="span12 container">
    -			<div class="left">
    -				<div class="box">
    -					<h3>Operation</h3>
    -				<@s.url id="url" action="exitRoom" namespace="/chat">
    -					<@s.param name="roomName" value="%{roomName}" />
    -				</@s.url>
    -					<ul>
    -						<li><@s.a href="%{#url}">Exit Room</@s.a></li>
    -					</ul>
    -				</div>
    -				<div class="box">
    -					<h3>Users Available In Chat</h3>
    -				<@s.url id="usersAvailableUrl" action="usersAvailable" namespace="/chat/ajax" />
    -				<@sx.div id="usersAvailable" href="%{usersAvailableUrl}"
    -				updateFreq="%{@org.apache.struts2.showcase.chat.Constants@UPDATE_FREQ}">
    -					Initial Users Available ...
    -				</@sx.div>
    -				</div>
    -			</div>
    -
    -			<div class="center">
    -				<div class="box">
    -					<h3>Messages Posted In Room [${roomName?default('')?html}]</h3>
    -				<@s.url id="url" value="/chat/ajax/messagesAvailableInRoom.action" includeContext="true">
    -					<@s.param name="roomName" value="%{roomName}" />
    -				</@s.url>
    -				<@sx.div id="messagesInRoom" href="%{#url}" includeContext="true"
    -				updateFreq="%{@org.apache.struts2.showcase.chat.Constants@UPDATE_FREQ}"
    -				listenTopics="topicMessageSend">
    -					Initial Messages In Room ...
    -				</@sx.div>
    -				</div>
    -
    -				<div class="box">
    -					<h3>Send Messages</h3>
    -				<@s.form id="sendMessageForm" action="sendMessageToRoom" namespace="/chat/ajax" method="POST">
    -					<div id="sendMessageResult"></div>
    -					<@s.textarea label="Message"name="message" theme="xhtml" />
    -					<@s.hidden name="roomName" value="%{roomName}" />
    -					<@sx.submit id="submit" resultDivId="sendMessageResult" afterNotifyTopics="topicMessageSend" value="%{'Send'}"  cssClass="btn btn-primary"/>
    -				</@s.form>
    -				</div>
    -			</div>
    -
    -
    -			<div class="right">
    -				<div class="box">
    -					<h3>Users Available In Room [${roomName?default('')?html}]</h3>
    -				<@s.url id="url" value="/chat/ajax/usersAvailableInRoom.action" includeContext="true">
    -					<@s.param name="roomName" value="%{roomName}" />
    -				</@s.url>
    -				<@sx.div id="usersAvailableInRoom" href="%{#url}" includeContext="true"
    -				delay="1" updateFreq="%{@org.apache.struts2.showcase.chat.Constants@UPDATE_FREQ}">
    -					Initial Users Available In Room ...
    -				</@sx.div>
    -				</div>
    -			</div>
    -
    -
    -		</div>
    -	</div>
    -</div>
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/chat/usersAvailable.ftl+0 6 removed
    @@ -1,6 +0,0 @@
    -
    -<ul>
    -<#list availableUsers as user>
    -	<li>${user.name?html}</li>
    -</#list>
    -</ul>
    
  • apps/showcase/src/main/webapp/WEB-INF/chat/usersAvailableInRoom.ftl+0 8 removed
    @@ -1,8 +0,0 @@
    -
    -<ul>
    -<@s.iterator id="member" value="%{usersAvailableInRoom}">
    -	<li><@s.property value="%{#member.name}" /></li>
    -</@s.iterator>
    -</ul>
    -
    -
    
  • apps/showcase/src/main/webapp/WEB-INF/decorators/main.jsp+238 266 modified
    @@ -1,271 +1,243 @@
     <!DOCTYPE html>
     <%@ page
    -		language="java"
    -		contentType="text/html; charset=UTF-8"
    -		pageEncoding="UTF-8" %>
    +        language="java"
    +        contentType="text/html; charset=UTF-8"
    +        pageEncoding="UTF-8" %>
     <%
    -	response.setHeader("Pragma", "no-cache");
    -	response.setHeader("Cache-Control", "no-cache");
    -	response.setDateHeader("Expires", 0);
    +    response.setHeader("Pragma", "no-cache");
    +    response.setHeader("Cache-Control", "no-cache");
    +    response.setDateHeader("Expires", 0);
     
    -	// Calculate the view sources url
    -	String sourceUrl = request.getContextPath()+"/viewSource.action";
    -	com.opensymphony.xwork2.ActionInvocation inv = com.opensymphony.xwork2.ActionContext.getContext().getActionInvocation();
    -	org.apache.struts2.dispatcher.mapper.ActionMapping mapping = org.apache.struts2.ServletActionContext.getActionMapping();
    -	if (inv != null) {
    -		try {
    -			com.opensymphony.xwork2.util.location.Location loc = inv.getProxy().getConfig().getLocation();
    -			sourceUrl += "?config="+(loc != null ? loc.getURI()+":"+loc.getLineNumber() : "");
    -		} catch (Exception e) {
    -			sourceUrl += "?config=";
    -		}
    -		sourceUrl += "&className="+inv.getProxy().getConfig().getClassName();
    +    // Calculate the view sources url
    +    String sourceUrl = request.getContextPath() + "/viewSource.action";
    +    com.opensymphony.xwork2.ActionInvocation inv = com.opensymphony.xwork2.ActionContext.getContext().getActionInvocation();
    +    org.apache.struts2.dispatcher.mapper.ActionMapping mapping = org.apache.struts2.ServletActionContext.getActionMapping();
    +    if (inv != null) {
    +        try {
    +            com.opensymphony.xwork2.util.location.Location loc = inv.getProxy().getConfig().getLocation();
    +            sourceUrl += "?config=" + (loc != null ? loc.getURI() + ":" + loc.getLineNumber() : "");
    +        } catch (Exception e) {
    +            sourceUrl += "?config=";
    +        }
    +        sourceUrl += "&className=" + inv.getProxy().getConfig().getClassName();
     
    -		if (inv.getResult() != null && inv.getResult() instanceof org.apache.struts2.dispatcher.StrutsResultSupport) {
    -			sourceUrl += "&page="+mapping.getNamespace()+"/"+((org.apache.struts2.dispatcher.StrutsResultSupport)inv.getResult()).getLastFinalLocation();
    -		}
    -	} else {
    -		sourceUrl += "?page="+request.getServletPath();
    -	}
    +        if (inv.getResult() != null && inv.getResult() instanceof org.apache.struts2.dispatcher.StrutsResultSupport) {
    +            sourceUrl += "&page=" + mapping.getNamespace() + "/" + ((org.apache.struts2.dispatcher.StrutsResultSupport) inv.getResult()).getLastFinalLocation();
    +        }
    +    } else {
    +        sourceUrl += "?page=" + request.getServletPath();
    +    }
     %>
     <%@taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %>
     <%@taglib prefix="page" uri="http://www.opensymphony.com/sitemesh/page" %>
     <%@taglib prefix="s" uri="/struts-tags" %>
     
     <html lang="en">
     <head>
    -	<meta charset="utf-8">
    -	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    -	<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
    -	<meta name="description" content="Struts2 Showcase for Apache Struts Project">
    -	<meta name="author" content="The Apache Software Foundation">
    +    <meta charset="utf-8">
    +    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    +    <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>
    +    <meta name="description" content="Struts2 Showcase for Apache Struts Project">
    +    <meta name="author" content="The Apache Software Foundation">
     
    -	<title><decorator:title default="Struts2 Showcase"/></title>
    +    <title><decorator:title default="Struts2 Showcase"/></title>
     
    -	<link href="<s:url value='/styles/bootstrap.css' encode='false' includeParams='none'/>" rel="stylesheet"
    -	      type="text/css" media="all">
    -	<link href="<s:url value='/styles/bootstrap-responsive.css' encode='false' includeParams='none'/>" rel="stylesheet"
    -	      type="text/css" media="all">
    -	<link href="<s:url value='/styles/main.css' encode='false' includeParams='none'/>" rel="stylesheet" type="text/css"
    -	      media="all"/>
    +    <link href="<s:url value='/styles/bootstrap.css' encode='false' includeParams='none'/>" rel="stylesheet"
    +          type="text/css" media="all">
    +    <link href="<s:url value='/styles/bootstrap-responsive.css' encode='false' includeParams='none'/>" rel="stylesheet"
    +          type="text/css" media="all">
    +    <link href="<s:url value='/styles/main.css' encode='false' includeParams='none'/>" rel="stylesheet" type="text/css"
    +          media="all"/>
     
    -	<script src="<s:url value='/js/jquery-1.8.2.min.js' encode='false' includeParams='none'/>"></script>
    -	<script src="<s:url value='/js/bootstrap.min.js' encode='false' includeParams='none'/>"></script>
    -	<script type="text/javascript">
    -		$(function () {
    -			$('.dropdown-toggle').dropdown();
    -			var alerts = $('ul.alert').wrap('<div />');
    -			alerts.prepend('<a class="close" data-dismiss="alert" href="#">&times;</a>');
    -			alerts.alert();
    -		});
    -	</script>
    +    <script src="<s:url value='/js/jquery-1.8.2.min.js' encode='false' includeParams='none'/>"></script>
    +    <script src="<s:url value='/js/bootstrap.min.js' encode='false' includeParams='none'/>"></script>
    +    <script type="text/javascript">
    +        $(function () {
    +            $('.dropdown-toggle').dropdown();
    +            var alerts = $('ul.alert').wrap('<div />');
    +            alerts.prepend('<a class="close" data-dismiss="alert" href="#">&times;</a>');
    +            alerts.alert();
    +        });
    +    </script>
     
    -	<!-- Prettify -->
    -	<link href="<s:url value='/styles/prettify.css' encode='false' includeParams='none'/>" rel="stylesheet">
    -	<script src="<s:url value='/js/prettify.js' encode='false' includeParams='none'/>"></script>
    +    <!-- Prettify -->
    +    <link href="<s:url value='/styles/prettify.css' encode='false' includeParams='none'/>" rel="stylesheet">
    +    <script src="<s:url value='/js/prettify.js' encode='false' includeParams='none'/>"></script>
     
    -	<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
    -	<!--[if lt IE 9]>
    -	<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    -	<![endif]-->
    +    <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
    +    <!--[if lt IE 9]>
    +    <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    +    <![endif]-->
     
    -	<decorator:head/>
    +    <decorator:head/>
     </head>
     
     <body id="page-home" onload="prettyPrint();">
     
     <div class="navbar navbar-fixed-top">
    -	<div class="navbar-inner">
    -		<div class="container-fluid">
    -			<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
    -				<span class="icon-bar"></span>
    -				<span class="icon-bar"></span>
    -				<span class="icon-bar"></span>
    -			</a>
    -			<s:a value="/showcase.jsp" cssClass="brand">Struts2 Showcase</s:a>
    -			<div class="nav-collapse">
    -				<ul class="nav">
    -					<li><s:a value="/showcase.jsp"><i class="icon-home"></i> Home</s:a></li>
    -					<li class="dropdown">
    -						<a href="#" class="dropdown-toggle" data-toggle="dropdown">Configuration<b
    -								class="caret"></b></a>
    -						<ul class="dropdown-menu">
    -							<li><s:a action="actionChain1!input" namespace="/actionchaining"
    -							         includeParams="none">Action Chaining</s:a></li>
    -							<li><s:a action="index" namespace="/config-browser"
    -							         includeParams="none">Config Browser</s:a></li>
    -							<li><s:a value="/conversion/index.jsp">Conversion</s:a></li>
    -							<li><s:a value="/person/index.html">Person Manager ( by Conventions )</s:a></li>
    -						</ul>
    -					</li>
    -					<li class="dropdown">
    -						<a href="#" class="dropdown-toggle" data-toggle="dropdown">Tags<b class="caret"></b></a>
    -						<ul class="dropdown-menu">
    -							<li class="dropdown-submenu">
    -								<a href="#">Non UI Tags</a>
    -								<ul class="dropdown-menu">
    -									<li><s:url var="url" action="showActionTagDemo" namespace="/tags/non-ui/actionTag"/><s:a
    -											href="%{url}">Action Tag</s:a></li>
    -									<li><s:url var="url" namespace="/tags/non-ui" action="date"/><s:a
    -											href="%{url}">Date Tag</s:a></li>
    -									<li><s:url var="url" action="debugTagDemo" namespace="/tags/non-ui"/><s:a
    -											href="%{url}">Debug Tag</s:a></li>
    -									<li><s:url var="url" action="showGeneratorTagDemo"
    -									           namespace="/tags/non-ui/iteratorGeneratorTag"/><s:a
    -											href="%{url}">Iterator Generator Tag</s:a></li>
    -									<li>
    -										<s:url var="url" action="showAppendTagDemo"
    -										       namespace="/tags/non-ui/appendIteratorTag"/>
    -										<s:a href="%{#url}">Append Iterator Tag</s:a>
    -									<li>
    -										<s:url var="url" action="showMergeTagDemo"
    -										       namespace="/tags/non-ui/mergeIteratorTag"/>
    -										<s:a href="%{#url}">Merge Iterator Demo</s:a>
    -									<li>
    -										<s:url var="url" action="showSubsetTagDemo"
    -										       namespace="/tags/non-ui/subsetIteratorTag"/>
    -										<s:a href="%{#url}">Subset Tag</s:a>
    -									<li><s:url var="url" action="actionPrefixExampleUsingFreemarker"
    -									           namespace="/tags/non-ui/actionPrefix"/><s:a
    -											href="%{#url}">Action Prefix Example (Freemarker)</s:a></li>
    -									<li><s:url var="url" action="testIfTagJsp" namespace="/tags/non-ui/ifTag"/><s:a
    -											href="%{#url}">If Tag (JSP)</s:a></li>
    -									<li><s:url var="url" action="testIfTagFreemarker"
    -									           namespace="/tags/non-ui/ifTag"/><s:a
    -											href="%{#url}">If Tag (Freemarker)</s:a></li>
    -								</ul>
    +    <div class="navbar-inner">
    +        <div class="container-fluid">
    +            <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
    +                <span class="icon-bar"></span>
    +                <span class="icon-bar"></span>
    +                <span class="icon-bar"></span>
    +            </a>
    +            <s:a value="/showcase.jsp" cssClass="brand">Struts2 Showcase</s:a>
    +            <div class="nav-collapse">
    +                <ul class="nav">
    +                    <li><s:a value="/showcase.jsp"><i class="icon-home"></i> Home</s:a></li>
    +                    <li class="dropdown">
    +                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Configuration<b
    +                                class="caret"></b></a>
    +                        <ul class="dropdown-menu">
    +                            <li><s:a action="actionChain1!input" namespace="/actionchaining"
    +                                     includeParams="none">Action Chaining</s:a></li>
    +                            <li><s:a action="index" namespace="/config-browser"
    +                                     includeParams="none">Config Browser</s:a></li>
    +                            <li><s:a value="/conversion/index.jsp">Conversion</s:a></li>
    +                            <li><s:a value="/person/index.html">Person Manager ( by Conventions )</s:a></li>
    +                        </ul>
    +                    </li>
    +                    <li class="dropdown">
    +                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Tags<b class="caret"></b></a>
    +                        <ul class="dropdown-menu">
    +                            <li class="dropdown-submenu">
    +                                <a href="#">Non UI Tags</a>
    +                                <ul class="dropdown-menu">
    +                                    <li><s:url var="url" action="showActionTagDemo" namespace="/tags/non-ui/actionTag"/><s:a
    +                                            href="%{url}">Action Tag</s:a></li>
    +                                    <li><s:url var="url" namespace="/tags/non-ui" action="date"/><s:a
    +                                            href="%{url}">Date Tag</s:a></li>
    +                                    <li><s:url var="url" action="debugTagDemo" namespace="/tags/non-ui"/><s:a
    +                                            href="%{url}">Debug Tag</s:a></li>
    +                                    <li><s:url var="url" action="showGeneratorTagDemo"
    +                                               namespace="/tags/non-ui/iteratorGeneratorTag"/><s:a
    +                                            href="%{url}">Iterator Generator Tag</s:a></li>
    +                                    <li>
    +                                        <s:url var="url" action="showAppendTagDemo"
    +                                               namespace="/tags/non-ui/appendIteratorTag"/>
    +                                        <s:a href="%{#url}">Append Iterator Tag</s:a>
    +                                    <li>
    +                                        <s:url var="url" action="showMergeTagDemo"
    +                                               namespace="/tags/non-ui/mergeIteratorTag"/>
    +                                        <s:a href="%{#url}">Merge Iterator Demo</s:a>
    +                                    <li>
    +                                        <s:url var="url" action="showSubsetTagDemo"
    +                                               namespace="/tags/non-ui/subsetIteratorTag"/>
    +                                        <s:a href="%{#url}">Subset Tag</s:a>
    +                                    <li><s:url var="url" action="actionPrefixExampleUsingFreemarker"
    +                                               namespace="/tags/non-ui/actionPrefix"/><s:a
    +                                            href="%{#url}">Action Prefix Example (Freemarker)</s:a></li>
    +                                    <li><s:url var="url" action="testIfTagJsp" namespace="/tags/non-ui/ifTag"/><s:a
    +                                            href="%{#url}">If Tag (JSP)</s:a></li>
    +                                    <li><s:url var="url" action="testIfTagFreemarker"
    +                                               namespace="/tags/non-ui/ifTag"/><s:a
    +                                            href="%{#url}">If Tag (Freemarker)</s:a></li>
    +                                </ul>
     
    -							</li>
    -							<li class="dropdown-submenu">
    -								<a href="#">UI Tags</a>
    -								<ul class="dropdown-menu">
    -									<li><s:url var="url" namespace="/tags/ui" action="example" method="input"/><s:a
    -											href="%{url}">UI Example</s:a></li>
    -									<li><s:url var="url" namespace="/tags/ui" action="exampleVelocity"
    -									           method="input"/><s:a href="%{url}">UI Example (Velocity)</s:a></li>
    -									<li><s:url var="url" namespace="/tags/ui" action="lotsOfOptiontransferselect"
    -									           method="input"/><s:a
    -											href="%{url}">Option Transfer Select UI Example</s:a></li>
    -									<li><s:url var="url" namespace="/tags/ui" action="moreSelects" method="input"/><s:a
    -											href="%{url}">More Select Box UI Examples</s:a></li>
    -									<li>
    -										<s:url var="url" namespace="/tags/ui" action="treeExampleStatic"/>
    -										<s:a href="%{url}">Tree Example (static)</s:a>
    -									<li>
    -										<s:url var="url" namespace="/tags/ui" action="showDynamicTreeAction"/>
    -										<s:a href="%{url}">Tree Example (dynamic)</s:a>
    -									<li>
    -										<s:url var="url" namespace="/tags/ui" action="showDynamicAjaxTreeAction"/>
    -										<s:a href="%{url}">Tree Example (dynamic ajax loading)</s:a>
    -									<li>
    -										<s:url var="url" namespace="/tags/ui" action="componentTagExample"/>
    -										<s:a href="%{#url}">Component Tag Example</s:a>
    -									<li><s:url var="url" namespace="/tags/ui" action="actionTagExample" method="input"/><s:a
    -											href="%{url}">Action Tag Example</s:a></li>
    -									<li><s:url var="url" namespace="/tags/ui" action="datepicker"/><s:a
    -											href="%{#url}">DateTime picker tag - Pick a date</s:a></li>
    -									<li><s:url var="url" namespace="/tags/ui" action="timepicker"/><s:a
    -											href="%{#url}">DateTime picker tag - Pick a time</s:a></li>
    -									<%--li><s:url var="url" namespace="/tags/ui" action="populateUsingIterator" method="input" /><s:a href="%{url}">UI population using iterator tag</s:a></li--%>
    -								</ul>
    -							</li>
    -						</ul>
    -					</li>
    -					<li class="dropdown">
    -						<a href="#" class="dropdown-toggle" data-toggle="dropdown">File<b class="caret"></b></a>
    -						<ul class="dropdown-menu">
    -							<li><s:a namespace="/filedownload" action="index">File Download</s:a></li>
    -							<li class="dropdown-submenu">
    -								<a href="#">File Upload</a>
    -								<ul class="dropdown-menu">
    -									<li>
    -										<s:url var="url" action="upload" namespace="/fileupload"/>
    -										<s:a href="%{#url}">Single File Upload</s:a>
    -									</li>
    -									<li>
    -										<s:url var="url" action="multipleUploadUsingList" namespace="/fileupload"/>
    -										<s:a href="%{#url}">Multiple File Upload (List)</s:a>
    +                            </li>
    +                            <li class="dropdown-submenu">
    +                                <a href="#">UI Tags</a>
    +                                <ul class="dropdown-menu">
    +                                    <li><s:url var="url" namespace="/tags/ui" action="example" method="input"/><s:a
    +                                            href="%{url}">UI Example</s:a></li>
    +                                    <li><s:url var="url" namespace="/tags/ui" action="exampleVelocity"
    +                                               method="input"/><s:a href="%{url}">UI Example (Velocity)</s:a></li>
    +                                    <li><s:url var="url" namespace="/tags/ui" action="lotsOfOptiontransferselect"
    +                                               method="input"/><s:a
    +                                            href="%{url}">Option Transfer Select UI Example</s:a></li>
    +                                    <li><s:url var="url" namespace="/tags/ui" action="moreSelects" method="input"/><s:a
    +                                            href="%{url}">More Select Box UI Examples</s:a></li>
    +                                    <li>
    +                                        <s:url var="url" namespace="/tags/ui" action="componentTagExample"/>
    +                                        <s:a href="%{#url}">Component Tag Example</s:a></li>
    +                                    <li><s:url var="url" namespace="/tags/ui" action="actionTagExample" method="input"/><s:a
    +                                            href="%{url}">Action Tag Example</s:a></li>
    +                                </ul>
    +                            </li>
    +                        </ul>
    +                    </li>
    +                    <li class="dropdown">
    +                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">File<b class="caret"></b></a>
    +                        <ul class="dropdown-menu">
    +                            <li><s:a namespace="/filedownload" action="index">File Download</s:a></li>
    +                            <li class="dropdown-submenu">
    +                                <a href="#">File Upload</a>
    +                                <ul class="dropdown-menu">
    +                                    <li>
    +                                        <s:url var="url" action="upload" namespace="/fileupload"/>
    +                                        <s:a href="%{#url}">Single File Upload</s:a>
    +                                    </li>
    +                                    <li>
    +                                        <s:url var="url" action="multipleUploadUsingList" namespace="/fileupload"/>
    +                                        <s:a href="%{#url}">Multiple File Upload (List)</s:a>
     
    -									</li>
    -									<li>
    -										<s:url var="url" action="multipleUploadUsingArray" namespace="/fileupload"/>
    -										<s:a href="%{#url}">Multiple File Upload (Array)</s:a>
    -									</li>
    -								</ul>
    -							</li>
    -						</ul>
    -					</li>
    -					<li class="dropdown">
    -						<a href="#" class="dropdown-toggle" data-toggle="dropdown">Examples<b class="caret"></b></a>
    -						<ul class="dropdown-menu">
    -							<li class="dropdown-submenu">
    -								<a href="#">Hangman</a>
    -								<ul class="dropdown-menu">
    -									<li><s:url var="url" namespace="/hangman" action="hangmanNonAjax"/><s:a
    -											href="%{url}">Hangman (Non Ajax)</s:a></li>
    -									<li><s:url var="url" namespace="/hangman" action="hangmanAjax"/><s:a
    -											href="%{url}">Hangman (Ajax - Experimental)</s:a></li>
    -								</ul>
    -							</li>
    -							<li><s:a value="/person/index.html">Person Manager</s:a></li>
    -							<li><s:a value="/skill/index.html">CRUD</s:a></li>
    -							<li><s:a value="/wait/index.html">Execute &amp; Wait</s:a></li>
    -							<li><s:a value="/token/index.html">Token</s:a></li>
    -							<li><s:a value="/validation/index.action">Validation</s:a></li>
    -							<li><s:url var="url" namespace="/modelDriven" action="modelDriven"/><s:a
    -									href="%{url}">Model Driven</s:a></li>
    -						</ul>
    -					</li>
    -					<li class="dropdown">
    -						<a href="#" class="dropdown-toggle" data-toggle="dropdown">Integration<b class="caret"></b></a>
    -						<ul class="dropdown-menu">
    -							<li class="dropdown-submenu">
    -								<a href="#">Freemarker</a>
    -								<ul class="dropdown-menu">
    -									<li>
    -										<s:url var="url" action="customFreemarkerManagerDemo" namespace="/freemarker"/>
    -										<s:a href="%{#url}">Demo of usage of a Custom Freemarker Manager</s:a>
    -									</li>
    -									<li>
    -										<s:url var="url" action="standardTags" namespace="/freemarker"/>
    -										<s:a href="%{#url}">Demo of Standard Struts Freemarker Tags</s:a>
    -									</li>
    -								</ul>
    -							</li>
    -							<li><s:a namespace="/jsf" action="index">JavaServer Faces</s:a></li>
    -							<li><s:a namespace="/integration" action="editGangster">Struts 1 Integration</s:a></li>
    -							<li><s:a value="/tiles/index.action">Tiles</s:a></li>
    -						</ul>
    -					</li>
    -					<li class="dropdown">
    -						<a href="#" class="dropdown-toggle" data-toggle="dropdown">AJAX<b class="caret"></b></a>
    -						<ul class="dropdown-menu">
    -							<li><s:a value="/ajax/index.html">Ajax plugin</s:a></li>
    -							<li><s:a value="/chat/index.html">Ajax Chat</s:a></li>
    -						</ul>
    -					</li>
    -					<li><s:a value="/interactive/index.action">Interactive Demo</s:a></li>
    -				</ul>
    +                                    </li>
    +                                    <li>
    +                                        <s:url var="url" action="multipleUploadUsingArray" namespace="/fileupload"/>
    +                                        <s:a href="%{#url}">Multiple File Upload (Array)</s:a>
    +                                    </li>
    +                                </ul>
    +                            </li>
    +                        </ul>
    +                    </li>
    +                    <li class="dropdown">
    +                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Examples<b class="caret"></b></a>
    +                        <ul class="dropdown-menu">
    +                            <li class="dropdown-submenu">
    +                            <li>
    +                                <s:url var="url" namespace="/hangman" action="hangmanNonAjax"/>
    +                                <s:a href="%{url}">Hangman</s:a>
    +                            </li>
    +                            <li><s:a value="/person/index.html">Person Manager</s:a></li>
    +                            <li><s:a value="/skill/index.html">CRUD</s:a></li>
    +                            <li><s:a value="/wait/index.html">Execute &amp; Wait</s:a></li>
    +                            <li><s:a value="/token/index.html">Token</s:a></li>
    +                            <li><s:a value="/validation/index.action">Validation</s:a></li>
    +                            <li><s:url var="url" namespace="/modelDriven" action="modelDriven"/><s:a
    +                                    href="%{url}">Model Driven</s:a></li>
    +                        </ul>
    +                    </li>
    +                    <li class="dropdown">
    +                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Integration<b class="caret"></b></a>
    +                        <ul class="dropdown-menu">
    +                            <li class="dropdown-submenu">
    +                                <a href="#">Freemarker</a>
    +                                <ul class="dropdown-menu">
    +                                    <li>
    +                                        <s:url var="url" action="customFreemarkerManagerDemo" namespace="/freemarker"/>
    +                                        <s:a href="%{#url}">Demo of usage of a Custom Freemarker Manager</s:a>
    +                                    </li>
    +                                    <li>
    +                                        <s:url var="url" action="standardTags" namespace="/freemarker"/>
    +                                        <s:a href="%{#url}">Demo of Standard Struts Freemarker Tags</s:a>
    +                                    </li>
    +                                </ul>
    +                            </li>
    +                            <li><s:a value="/tiles/index.action">Tiles</s:a></li>
    +                        </ul>
    +                    </li>
    +                </ul>
     
    -				<ul class="nav pull-right">
    -					<li class="dropdown last">
    -						<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="icon-flag"></i> Help<b
    -								class="caret"></b></a>
    -						<ul class="dropdown-menu">
    -							<li><s:a value="/help.jsp">Help</s:a></li>
    -							<li><a href="http://struts.apache.org/mail.html"><i class="icon-share"></i> User Mailing
    -								List</a></li>
    -							<li><a href="http://struts.apache.org/2.x/"><i class="icon-share"></i> Struts2 Website</a>
    -							</li>
    -							<li><a href="http://struts.apache.org/2.x/docs/home.html"><i class="icon-share"></i>
    -								Documentation</a></li>
    -						</ul>
    -					</li>
    -				</ul>
    -			</div>
    -			<!--/.nav-collapse -->
    -		</div>
    -	</div>
    +                <ul class="nav pull-right">
    +                    <li class="dropdown last">
    +                        <a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="icon-flag"></i> Help<b
    +                                class="caret"></b></a>
    +                        <ul class="dropdown-menu">
    +                            <li><s:a value="/help.jsp">Help</s:a></li>
    +                            <li><a href="http://struts.apache.org/mail.html"><i class="icon-share"></i> User Mailing
    +                                List</a></li>
    +                            <li><a href="http://struts.apache.org"><i class="icon-share"></i> Struts2 Website</a>
    +                            </li>
    +                            <li><a href="http://struts.apache.org/docs/home.html"><i class="icon-share"></i>
    +                                Documentation</a></li>
    +                        </ul>
    +                    </li>
    +                </ul>
    +            </div>
    +            <!--/.nav-collapse -->
    +        </div>
    +    </div>
     </div>
     
     <decorator:body/>
    @@ -274,34 +246,34 @@
     <hr>
     
     <footer id="footer" class="footer">
    -	<div>
    -		<p style="text-align: center;">
    -			<a href="<%=sourceUrl %>" class="btn btn-info">View Sources</a>
    -		</p>
    -	</div>
    +    <div>
    +        <p style="text-align: center;">
    +            <a href="<%=sourceUrl %>" class="btn btn-info">View Sources</a>
    +        </p>
    +    </div>
     
     
    -	<div class="pull-right">
    -		<div>
    -			<s:action var="dateAction" name="date" namespace="/" executeResult="true"/>
    -		</div>
    -		<!-- end branding -->
    +    <div class="pull-right">
    +        <div>
    +            <s:action var="dateAction" name="date" namespace="/" executeResult="true"/>
    +        </div>
    +        <!-- end branding -->
     
    -		<div>
    -			<a href="http://struts.apache.org/2.x/">
    -				<img src="<s:url value='/img/struts-power.gif' encode='false' includeParams='none'/>"
    -				     alt="Powered by Struts"/>
    -			</a>
    -		</div>
    -		<!-- end search -->
    -	</div>
    +        <div>
    +            <a href="http://struts.apache.org/2.x/">
    +                <img src="<s:url value='/img/struts-power.gif' encode='false' includeParams='none'/>"
    +                     alt="Powered by Struts"/>
    +            </a>
    +        </div>
    +        <!-- end search -->
    +    </div>
     
    -	<div class="pull-left">
    -		Copyright &copy; 2003-<s:property value="#dateAction.now.year + 1900"/>
    -		<a href="http://www.apache.org">
    -			The Apache Software Foundation.
    -		</a>
    -	</div>
    +    <div class="pull-left">
    +        Copyright &copy; 2003-<s:property value="#dateAction.now.year + 1900"/>
    +        <a href="http://www.apache.org">
    +            The Apache Software Foundation.
    +        </a>
    +    </div>
     </footer>
     </body>
     </html>
    
  • apps/showcase/src/main/webapp/WEB-INF/decorators.xml+0 10 modified
    @@ -7,21 +7,11 @@
             <pattern>/styles/*</pattern>
             <pattern>/scripts/*</pattern>
             <pattern>/images/*</pattern>
    -        <pattern>/dojo/*</pattern>
             <pattern>/struts/*</pattern>
    -        <pattern>/ajax/AjaxResult*</pattern>
    -        <pattern>/AjaxTest.action</pattern>
    -        <pattern>/ajax/remoteforms/AjaxRemoteForm.action</pattern>
    -        <pattern>/tags/ui/ajax/*</pattern>
    -        <pattern>/chat/ajax/*</pattern>
    -        <pattern>/hangman/ajax/*</pattern>
             <pattern>/nodecorate/*</pattern>
         </excludes>
     
         <decorator name="main" page="main.jsp">
             <pattern>/*</pattern>
         </decorator>
    -    <!--<decorator name="panel" page="panel.jsp"/>-->
    -    <!--<decorator name="dashedBox" page="dashedBox.jsp"/>-->
    -    <!--<decorator name="printable" page="printable.jsp"/>-->
     </decorators>
    
  • apps/showcase/src/main/webapp/WEB-INF/empmanager/editEmployee.jsp+1 2 modified
    @@ -1,5 +1,4 @@
     <%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
     <html>
     <head>
     	<s:if test="currentEmployee!=null">
    @@ -35,7 +34,7 @@
     				<s:textfield label="Employee Id" name="currentEmployee.empId"/>
     				<s:textfield label="%{getText('employee.firstName')}" name="currentEmployee.firstName"/>
     				<s:textfield label="%{getText('employee.lastName')}" name="currentEmployee.lastName"/>
    -				<sx:datetimepicker label="Birthdate" name="currentEmployee.birthDate"/>
    +				<s:textfield type="date" label="Birthdate" name="currentEmployee.birthDate"/>
     				<s:textfield label="Salary" name="currentEmployee.salary" value="%{getText('format.number',{currentEmployee.salary})}" />
     				<s:checkbox fieldValue="true" label="Married" name="currentEmployee.married"/>
     				<s:combobox list="availablePositions" label="Position" name="currentEmployee.position"/>
    
  • apps/showcase/src/main/webapp/WEB-INF/hangman/hangmanAjax.ftl+0 247 removed
    @@ -1,247 +0,0 @@
    -<html>
    -<head>
    -	<title>Struts2 Showcase - Hangman (AJAX)</title>
    -<@sx.head />
    -</head>
    -<body>
    -<div class="page-header">
    -	<h1>Hangman</h1>
    -</div>
    -
    -<div class="container-fluid">
    -	<div class="row-fluid">
    -		<div class="span12">
    -
    -			<script>
    -				function destroyWidgets() {
    -					var div = dojo.byId("updateCharacterAvailableDiv");
    -					var anchors = div.getElementsByTagName("a");
    -					dojo.lang.forEach(anchors, function (anchor) {
    -						var widget = dojo.widget.byId(anchor);
    -						widget.destroy();
    -					});
    -				}
    -
    -				var _listeners = {
    -					guessMade:function (request, widget) {
    -						var sourceId = widget.widgetId;
    -						this.guessMadeFunc(sourceId);
    -						this.updateCharacterAvailable(sourceId);
    -						this.updateVocab(sourceId);
    -						this.updateScaffold(sourceId);
    -						this.updateGuessLeft(sourceId);
    -					},
    -					guessMadeFunc:function (sourceId) {
    -						var requestAttr = { character:sourceId };
    -						dojo.io.bind({
    -							url:"<@s.url action="guessCharacter" namespace="/hangman" />",
    -							load:function (type, data, event) {
    -
    -							},
    -							mimetype:"text/html",
    -							content:requestAttr
    -						});
    -					},
    -					updateCharacterAvailable:function (sourceId) {
    -						dojo.io.bind({
    -							url:"<@s.url action="updateCharacterAvailable" namespace="/hangman/ajax" />",
    -							load:function (type, data, event) {
    -								var div = dojo.byId("updateCharacterAvailableDiv");
    -								destroyWidgets();
    -								div.innerHTML = data;
    -
    -								try {
    -									var xmlParser = new dojo.xml.Parse();
    -									var frag = xmlParser.parseElement(div, null, true);
    -									dojo.widget.getParser().createComponents(frag);
    -									// eval any scripts being returned
    -									var scripts = div.getElementsByTagName('script');
    -									for (var i = 0; i < scripts.length; i++) {
    -										eval(scripts[i].innerHTML);
    -									}
    -								}
    -								catch (e) {
    -									alert('dojo error ' + e);
    -									dojo.debug("auto-build-widgets error: " + e);
    -								}
    -							},
    -							mimetype:"text/html"
    -						});
    -					},
    -					updateVocab:function (sourceId) {
    -						dojo.io.bind({
    -							url:"<@s.url action="updateVocabCharacters" namespace="/hangman/ajax" />",
    -							load:function (type, data, event) {
    -								var div = dojo.byId("updateVocabDiv");
    -								div.innerHTML = data;
    -
    -								try {
    -									var xmlParser = new dojo.xml.Parse();
    -									var frag = xmlParser.parseElement(div, null, true);
    -
    -									var scripts = div.getElementsByTagName("script");
    -									for (var i = 0; i < scripts.length; i++) {
    -										eval(scripts[i].innerHTML);
    -									}
    -								}
    -								catch (e) {
    -									alert("dojo error" + e);
    -									dojo.debug("auto-build-widgets error: " + e);
    -								}
    -							},
    -							mimetype:"text/html"
    -						});
    -					},
    -					updateScaffold:function (sourceId) {
    -						dojo.io.bind({
    -							url:"<@s.url action="updateScaffold" namespace="/hangman/ajax" />",
    -							load:function (type, data, event) {
    -								var div = dojo.byId("updateScaffoldDiv");
    -								div.innerHTML = data;
    -
    -								try {
    -									var xmlParser = new dojo.xml.Parse();
    -									var frag = xmlParser.parseElement(div, null, true);
    -
    -									var scripts = div.getElementsByTagName("script");
    -									for (var i = 0; i < scripts.length; i++) {
    -										eval(scripts[i].innerHTML);
    -									}
    -								}
    -								catch (e) {
    -									alert("dojo error" + e);
    -									dojo.debug("auto-build-widgets error: " + e);
    -								}
    -							},
    -							mimetype:"text/html"
    -						});
    -					},
    -					updateGuessLeft:function (sourceId) {
    -						dojo.io.bind({
    -							url:"<@s.url action="updateGuessLeft" namespace="/hangman/ajax" />",
    -							load:function (type, data, event) {
    -								var div = dojo.byId("updateGuessLeftDiv");
    -								div.innerHTML = data;
    -
    -								try {
    -									var xmlParser = new dojo.xml.Parse();
    -									var frag = xmlParser.parseElement(div, null, true);
    -
    -									var scripts = div.getElementsByTagName("script");
    -									for (var i = 0; i < scripts.length; i++) {
    -										eval(scripts[i].innerHTML);
    -									}
    -								}
    -								catch (e) {
    -									alert("dojo error" + e);
    -									dojo.debug("auto-build-widgets error: " + e);
    -								}
    -							},
    -							mimetype:"text/html"
    -						});
    -					}
    -				};
    -				dojo.event.topic.subscribe("topicGuessMade", _listeners, "guessMade");
    -			</script>
    -
    -			<table bgcolor="green">
    -				<tr>
    -					<td>
    -					<@s.url id="url" value="/hangman/images/hangman.png" />
    -						<img alt="Hangman" src="<@s.property value="%{#url}" />"
    -						     width="197" height="50" border="0"/>
    -					</td>
    -					<td width="70" align="right">
    -					<#-- Guesses Left -->
    -						<div id="updateGuessLeftDiv">
    -						<@s.set name="guessLeftImageName" value="%{'Chalkboard_'+hangman.guessLeft()+'.png'}" />
    -						<@s.url id="url" value="%{'/hangman/images/'+#guessLeftImageName}" />
    -							<img alt="No. Guesses Left"
    -							     src="<@s.property value="%{#url}"/>" width="20" height="20" border="0"/>
    -						</div>
    -					</td>
    -					<td>
    -					<@s.url id="url" value="/hangman/images/guesses-left.png" />
    -						<img alt="Guesses Left"
    -						     src="<@s.property value="%{#url}" />" width="164" height="11" border="0"/>
    -					</td>
    -				</tr>
    -				<tr>
    -					<td></td>
    -					<td align="left">
    -					<#-- Display Scaffold -->
    -						<div id="updateScaffoldDiv">
    -						<@s.set name="scaffoldImageName" value="%{'scaffold_'+hangman.guessLeft()+'.png'}" />
    -						<@s.url id="url" value="%{'/hangman/images/'+#scaffoldImageName}" />
    -							<img src="<@s.property value="%{#url}" />" border="0"/>
    -						</div>
    -					</td>
    -					<td></td>
    -				</tr>
    -				<tr>
    -					<td width="160">
    -						<p align="right">
    -						<@s.url id="url" value="/hangman/images/guess.png" />
    -							<img alt="Current Guess" src="<@s.property value="%{#url}" />"
    -							     align="MIDDLE" width="127" height="20" border="0"/></p>
    -					</td>
    -					<td>
    -					<#-- Display Vacab  -->
    -						<div id="updateVocabDiv">
    -						<@s.iterator id="currentCharacter" value="%{hangman.vocab.inCharacters()}" stat="stat">
    -							<#if hangman.characterGuessedBefore(currentCharacter)>
    -								<@s.set name="chalkboardImageName" value="%{'Chalkboard_'+#currentCharacter.toString()+'.png'}" />
    -								<@s.url id="url" value="%{'/hangman/images/'+#chalkboardImageName}" />
    -								<img height="36" alt="<@s.property value="%{#currentCharacter}" />"
    -								     src="<@s.property value="%{#url}" />" width="36" border="0"/>
    -							<#else>
    -								<@s.url id="url" value="/hangman/images/Chalkboard_underscroll.png" />
    -								<img height="36" alt="_"
    -								     src="<@s.property value="%{#url}" />" width="36" border="0"/>
    -							</#if>
    -						</@s.iterator>
    -						</div>
    -					</td>
    -				</tr>
    -				<tr>
    -					<td valign="top">
    -						<p align="right">
    -						<@s.url id="url" value="/hangman/images/choose.png" />
    -							<img alt="Choose" src="<@s.property value="%{#url}" />"
    -							     height="20" width="151" border="0"/>
    -						</p>
    -					</td>
    -					<td width="330">
    -
    -					<#-- Show Characters Available -->
    -						<div id="updateCharacterAvailableDiv">
    -						<@s.iterator id="currentCharacter" value="%{hangman.charactersAvailable}" status="stat">
    -							<@s.set name="chalkboardImageName" value="%{'Chalkboard_'+#currentCharacter+'.png'}" />
    -							<@s.url id="chalkboardImageUrl" value="%{'/hangman/images/'+#chalkboardImageName}" />
    -							<@s.url id="spacerUrl" value="/hangman/images/letter-spacer.png" />
    -
    -							<@s.url id="blankUrl" value="ajax/blank.action" includeContext="false" />
    -							<@sx.a  id="%{#currentCharacter}"
    -							beforeNotifyTopics="topicGuessMade"
    -							showErrorTransportText="true">
    -								<img height="36" alt="" src="<@s.property value="%{#chalkboardImageUrl}" />" width="36" border="0"/>
    -							</@sx.a>
    -						</@s.iterator>
    -						</div>
    -
    -
    -					</td>
    -				</tr>
    -				<tr>
    -					<td>
    -
    -					</td>
    -				</tr>
    -			</table>
    -		</div>
    -	</div>
    -</div>
    -</body>
    -</html>
    -
    -
    
  • apps/showcase/src/main/webapp/WEB-INF/integration/modelDriven.jsp+0 44 removed
    @@ -1,44 +0,0 @@
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<html>
    -<head>
    -	<title>Struts2 Showcase - Struts1 Integration</title>
    -	<s:head/>
    -</head>
    -
    -<body>
    -
    -<div class="page-header">
    -	<h1>Struts1 Integration</h1>
    -</div>
    -
    -<div class="container-fluid">
    -	<div class="row-fluid">
    -		<div class="span12">
    -
    -
    -			<s:form action="saveGangster" namespace="/integration">
    -
    -				<s:textfield
    -						label="Gangster Name"
    -						name="name"/>
    -				<s:textfield
    -						label="Gangster Age"
    -						name="age"/>
    -				<s:checkbox
    -						label="Gangster Busted Before"
    -						name="bustedBefore"/>
    -				<s:textarea
    -						cols="30"
    -						rows="5"
    -						label="Gangster Description"
    -						name="description"/>
    -				<s:submit cssClass="btn btn-primary"/>
    -
    -			</s:form>
    -
    -
    -		</div>
    -	</div>
    -</div>
    -</body>
    -</html>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/integration/modelDrivenResult.jsp+0 43 removed
    @@ -1,43 +0,0 @@
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<html>
    -<head>
    -	<title>Struts2 Showcase - Struts1 Integration - Result</title>
    -	<style type="text/css">
    -		.label {
    -			background-color: #ffffff;
    -			color: #000000;
    -			text-shadow: none;
    -			font-weight: bold;
    -		}
    -	</style>
    -</head>
    -
    -<body>
    -
    -<div class="page-header">
    -	<h1>Struts1 Integration - Result</h1>
    -</div>
    -
    -<div class="container-fluid">
    -	<div class="row-fluid">
    -		<div class="span12">
    -
    -			<s:actionmessage cssClass="alert alert-info"/>
    -			<s:label
    -					label="Gangster Name"
    -					name="name" /><br/>
    -			<s:label
    -					label="Gangster Age"
    -					name="age" /><br/>
    -			<s:label
    -					label="Busted Before"
    -					name="bustedBefore" /><br/>
    -			<s:label
    -					label="Gangster Description"
    -					name="description" /><br/>
    -
    -		</div>
    -	</div>
    -</div>
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/interactive/demo.jsp+0 0 removed
  • apps/showcase/src/main/webapp/WEB-INF/interactive/example-action.jsp+0 76 removed
    @@ -1,76 +0,0 @@
    -<%
    -    request.setAttribute("decorator", "none");
    -    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    -    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    -    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
    -%>
    -<pre style="font-style: normal;">
    -<span class="kw">package</span> org.apache.struts2.showcase.action;
    -
    -<span class="kw">import</span> java.util.Arrays;
    -<span class="kw">import</span> java.util.Date;
    -<span class="kw">import</span> java.util.HashMap;
    -<span class="kw">import</span> java.util.List;
    -<span class="kw">import</span> java.util.Map;
    -
    -<span class="kw">import</span> com.opensymphony.xwork2.ActionSupport;
    -
    -<span class="kw">public class</span> ExampleAction <span class="kw">extends</span> ActionSupport {
    -    <span class="kw">public static final</span> String CONSTANT = "Struts Rocks!";
    -        
    -    <span class="kw">public static</span> Date getCurrentDate() {
    -        return new Date();
    -    }
    -    
    -    <span class="kw">public</span> String getName() {
    -        return "John Galt";
    -    }
    -
    -    <span class="kw">public</span> String[] getBands() {
    -        return new String[] { "Pink Floyd", "Metallica", "Guns & Roses" };
    -    }
    -
    -    <span class="kw">public</span> List&lt;String&gt; getMovies() {
    -        return Arrays.asList("Lord of the Rings", "Matrix");
    -    }
    -
    -    <span class="kw">public</span> Book getBook() {
    -        <span class="kw">return</span> new Book("Iliad", "Homer");
    -    }
    -
    -    <span class="kw">public</span> Map&lt;String, Book&gt; getBooks() {
    -        Map&lt;String, Book&gt; books = new HashMap&lt;String, Book&gt;();
    -        books.put("Iliad", new Book("Iliad", "Homer"));
    -        books.put("The Republic", new Book("The Replublic", "Plato"));
    -        books.put("Thus Spake Zarathustra", new Book("Thus Spake Zarathustra",
    -            "Friedrich Nietzsche"));
    -        return books;
    -    }
    -}
    -
    -<span class="kw">class</span> Book {
    -    <span class="kw">private</span> String title;
    -    <span class="kw">private</span> String author;
    -
    -    <span class="kw">public</span> Book(String title, String author) {
    -        this.title = title;
    -        this.author = author;
    -    }
    -
    -    <span class="kw">public</span> String getTitle() {
    -        <span class="kw">return</span> title;
    -    }
    -
    -    <span class="kw">public void</span> setTitle(String title) {
    -        this.title = title;
    -    }
    -
    -    <span class="kw">public</span> String getAuthor() {
    -        return author;
    -    }
    -
    -    <span class="kw">public void</span> setAuthor(String author) {
    -        this.author = author;
    -    }
    -}
    -</pre>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/interactive/index.jsp+0 241 removed
    @@ -1,241 +0,0 @@
    -<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<html>
    -<head>
    -    <title>OGNL and tags demo</title>
    -    <s:url var="struts" value="/struts" includeParams="none"/>
    -    <s:url var="jspEval" action="jspEval" namespace="/nodecorate" includeParams="none"/>
    -    <s:url var="viewClass" value="/interactive/example-action.jsp" includeParams="none"/>
    -    <s:url var="ognlBase" value="/interactive/ognl_" includeParams="none"/>
    -    <s:url var="jspBase" value="/interactive/jsp_" includeParams="none"/>
    -    
    -    <script src="${struts}/webconsole.js"></script>
    -    <sx:head/>
    -    <script>
    -        var index = -1;
    -        var runningOgnl = true;
    -        var ognlBase = "${ognlBase}";
    -        var jspBase = "${jspBase}";
    -        var ognlCount = 9;
    -        var jspCount = 5;
    -        
    -        dojo.addOnLoad(function() {
    -            var classSrc = dojo.byId("classSrc");
    -            dojo.io.updateNode(classSrc, "${viewClass}");
    -            dojo.html.hide("previous");
    -            dojo.html.hide("next");
    -        });
    -        
    -        dojo.event.topic.subscribe("/reloadGuide", function() {
    -            next();
    -        });
    -        
    -        function startOgnl() {
    -            selectOGNLTab();
    -            index = -1;
    -            runningOgnl = true;
    -            change(1);
    -            updateNavigation();
    -        }
    -        
    -        function startJSP() {
    -            selectJSPTab();
    -            index = -1;
    -            runningOgnl = false;
    -            change(1);
    -            updateNavigation();
    -        }
    -        
    -        function execOgnl(id) {
    -            var exp = dojo.string.trim(dojo.byId(id ? id : "example").innerHTML);
    -            dojo.byId("wc-command").value = exp;
    -            
    -            keyEvent({keyCode : 13}, '${jspEval}');
    -        }
    -        
    -        function execJSP(id) {
    -            var exp = dojo.string.trim(dojo.byId(id ? id : "example").innerHTML);
    -            dojo.byId("jsp").value = unscape(exp);
    -            
    -            dojo.event.topic.publish("/evalJSP")
    -        }
    -        
    -        function unscape(str) {
    -            return str.replace(/&amp;/gm, "&").replace(/&lt;/gm, "<").replace(/&gt;/gm, ">").replace(/&quot;/gm, '"');
    -        }
    -        
    -        function selectClassSrcTab() {
    -            dojo.widget.byId("mainTabContainer").selectTab("classTab");
    -        }
    -        
    -        function selectJSPTab() {
    -            dojo.widget.byId("mainTabContainer").selectTab("jspTab");
    -        }
    -        
    -        function selectOGNLTab() {
    -            dojo.widget.byId("mainTabContainer").selectTab("ognlTab");
    -        }
    -       
    -        function change(delta) {
    -            index+=delta;
    -            
    -            var url = (runningOgnl ? ognlBase : jspBase) + index + ".jsp";
    -            var bind = dojo.widget.byId("guideBind");
    -            bind.href = url;
    -            dojo.event.topic.publish("/loadContent");
    -            updateNavigation();
    -        }
    -        
    -        function updateNavigation() {
    -            if(index <= 0) {
    -                dojo.html.hide("previous");
    -            } else {
    -                dojo.html.show("previous");
    -            }
    -            
    -            var top = runningOgnl ? ognlCount : jspCount;
    -            
    -            if(index == top - 1) {
    -                dojo.html.hide("next");
    -            } else {
    -                dojo.html.show("next");
    -            }
    -        }
    -    </script>
    -    
    -    <style type="">
    -        .wc-results {
    -            overflow: auto; 
    -            margin: 0px; 
    -            padding: 5px; 
    -            font-family: courier; 
    -            color: white; 
    -            background-color: black; 
    -            height: 200px;
    -        }
    -        .wc-results pre {
    -            display: inline;
    -        }
    -        .wc-command {
    -            margin: 1px 0 0 0; 
    -        }
    -        .shell {
    -            width: 100%;
    -        }
    -       
    -        .jsp {
    -            border-style: solid;
    -            width: 100%;
    -            height: 200px;
    -        }
    -        .jspResult {
    -            border-style: none;
    -            width: 100%;
    -            height: 200px;
    -            padding: 5px;
    -        }
    -        .jspResultHeader {
    -            background-color: #818EBD;
    -            color: white;
    -            width: 100%;
    -            height: 15px;
    -        }
    -        .jspResultHeader span {
    -            padding: 5px;
    -        }
    -        .classSrc {
    -            font-family:Courier;
    -            font-size:11px;
    -            line-height:13px;
    -            overflow: auto; 
    -            height: 400px;
    -            width: 100%;
    -        }
    -        .tabContainer {
    -            width: 1000px;
    -            margin: 0 auto;
    -        }
    -        .guideContainer {
    -            width: 600px;
    -            border-width: 1px;
    -            border-style: solid;
    -            margin: 0 auto;
    -        }
    -        .guide {
    -            padding: 5px;
    -        }
    -        pre {
    -            font-family:Verdana,Geneva,Arial,Helvetica,sans-serif;
    -            font-style: italic;
    -        }
    -        span.kw {
    -            color: rgb(127, 0, 85);
    -            font-weight: bold;;
    -        }
    -    </style>
    -</head>
    -
    -<sx:bind id="guideBind" targets="guide" listenTopics="/loadContent"/>
    -
    -<body>
    -    <sx:tabbedpanel id="mainTabContainer" cssClass="tabContainer">
    -        <sx:div label="OGNL Console" id="ognlTab">
    -            <div id="shell" class="shell">
    -               <form onsubmit="return false" id="wc-form">
    -                    <div class="wc-results" id="wc-result">
    -                         Welcome to the OGNL console!
    -                         <br />
    -                         :-&gt;
    -                    </div>
    -                    <input type="hidden" name="debug" value="command" />
    -                    OGNL Expression <input name="expression" onkeyup="keyEvent(event, '${jspEval}')" class="input-xxlarge wc-command" id="wc-command" type="text" />
    -                </form>
    -            </div>
    -        </sx:div>
    -        <sx:div label="JSP Console" id="jspTab">
    -            <table style="width: 100%" cellpadding="1">
    -                <tr valign="top">
    -                    <td width="50%">
    -                       <form theme="simple" namespace="/nodecorate" action="jspEval" method="post">
    -                           <s:textarea cssClass="jsp" theme="simple" name="jsp" />
    -                           <sx:submit
    -                                value="Eval JSP Fragment" 
    -                                href="%{#jspEval}" 
    -                                targets="jspResult" 
    -                                listenTopics="/evalJSP"/>
    -                       </form>
    -                    </td>
    -                    <td width="50%">
    -                        <div class="jspResultHeader">
    -                            <span>JSP Eval Result</span>
    -                        </div>
    -                        <div id="jspResult" class="jspResult">
    -                        </div>
    -                    </td>
    -                </tr>
    -            </table>    
    -        </sx:div>
    -        <sx:div label="Class on top of the Value Stack" id="classTab">
    -            <div id="classSrc" class="classSrc">
    -            </div>
    -        </sx:div>
    -    </sx:tabbedpanel>
    -    <br/><br/>
    -    <div class="guideContainer">
    -        <div class="jspResultHeader">
    -            <span>Interactive Guide</span>
    -        </div>
    -        <sx:div id="guide" listenTopics="/reloadGuide" cssClass="guide">
    -            <p><a href="#" onclick="startOgnl()">Start OGNL Interactive Demo</a></p>
    -            <p><a href="#" onclick="startJSP()">Start JSP Interactive Demo</a></p>
    -        </sx:div>   
    -        <div>
    -            <a href="#" id="previous" onclick="change(-1)" style="float: left"><< Previous</a>
    -            <a href="#" id="next" onclick="change(1)" style="float: right">Next >></a>
    -        </div>
    -    </div>
    -</body>
    -
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/interactive/jsp_0.jsp+0 62 removed
    @@ -1,62 +0,0 @@
    -<%
    -    request.setAttribute("decorator", "none");
    -    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    -    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    -    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
    -%>
    -<p>
    -    <b>String Attributes</b>
    -</p>
    -<p>
    -    Some tag attributes are expected to be Strings in which case String literals
    -    can be passed as the value, like the <i>href</i> attribute in the <i>a</i> tag.
    -</p>
    -<p>
    -    <i>
    -        &lt;s:a href=&quot;http://struts.apache.org/&quot; /&gt; 
    -    </i>
    -</p>
    -<p>
    -   If the value that you want to use in one of these string literal attributes is stored on the Value Stack,
    -   then the <i>%{#name}</i> syntax (alternative syntax) needs to be used. Assuming there is a value
    -   with the name "url" stored on the stack:
    -</p>
    -<p>
    -    <i>
    -        &lt;s:a href=&quot;%{#url}&quot; /&gt;
    -    </i>
    -</p>
    -<p>
    -  will create an anchor and use the value of "url" for the <i>href</i> attribute.
    -</p>
    -<p>
    -    <b>Value Attributes</b>
    -</p>
    -<p>
    -    Other attributes expect an object as their value(not an string literal). In these attributes you can specify
    -    the name of a variable stored on the Value Stack, and the tag will look it up and use it. Like the
    -    <i>value</i> attribute in the <i>property</i> tag. Assuming there is an object stored on the Value Stack with
    -    the name "movie", then:
    -</p>
    -<p>
    -    <i>
    -        &lt;s:property value=&quot;movie&quot; /&gt;
    -    </i>
    -</p>
    -<p>
    -  will print the value to the page. To pass an String literal to an attribute that expects a value use the <i>%{'string'}</i>
    -  notation.
    -</p>
    -<p>
    -  If you don't remember if an attribute expects an string literal or a value, you can always use the <i>%{value}</i> notation:
    -</p>
    -<p>
    -    <i>
    -        &lt;s:a href=&quot;%{'http://struts.apache.org/'}&quot; /&gt;
    -        <br />
    -        &lt;s:property value=&quot;%{#movie}&quot; /&gt;
    -    </i>
    -</p>
    -<p>
    -    <a href="#" onclick="window.open('http://struts.apache.org/2.x/docs/tag-syntax.html')">[More details]</a>
    -</p>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/interactive/jsp_1.jsp+0 52 removed
    @@ -1,52 +0,0 @@
    -<%
    -    request.setAttribute("decorator", "none");
    -    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    -    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    -    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
    -%>
    -<p>
    -    <b>Print property value, using the <i>property tag</i></b>
    -</p>
    -<p>
    -    On the OGNL demo you learned how to access values from the Value Stack using OGNL expressions.
    -    The <i>property</i> tag is used to print to the page the result of an OGNL expression. The expression
    -    is specified in the <i>value</i> attribute.
    -</p>
    -<p>To print the value of the expression <i>name</i> to the page type:
    -<p>
    -    <i id="example0">
    -        &lt;s:property value=&quot;name&quot; /&gt;
    -    </i>
    -</p>
    -<p>
    -    on the JSP console and hit enter. <a href="#" onclick="execJSP('example0')">Do it for me</a>
    -</p>
    -<p>
    -    As you saw in the OGNL demo, to print a property of an object that is not on top of the stack,
    -    use the <i>#object.property</i> notation.
    -</p>
    -<p>To print the value for the key "struts.view_uri" in <i>request</i> to the page type:
    -<p>
    -    <i id="example1">
    -        &lt;s:property value=&quot;#request['struts.view_uri']&quot; /&gt;
    -    </i>
    -</p>
    -<p>
    -    on the JSP console and hit enter. <a href="#" onclick="execJSP('example1')">Do it for me</a>
    -</p>
    -<p>
    -    <b>Print property value, using the <i>$</i> operator</b>
    -</p>
    -<p>Use the <i>${name}</i> notation to print values from the Value Stack to the page.
    -<p>To print the value of the expression <i>name</i> to the page type:
    -<p>
    -    <i id="example2">
    -        &#36;{name}
    -    </i>
    -</p>
    -<p>
    -    on the JSP console and hit enter. <a href="#" onclick="execJSP('example2')">Do it for me</a>
    -</p>
    -<p>
    -    <a href="#" onclick="window.open('http://struts.apache.org/2.x/docs/property.html')">[More details]</a>
    -</p>
    
  • apps/showcase/src/main/webapp/WEB-INF/interactive/jsp_2.jsp+0 54 removed
    @@ -1,54 +0,0 @@
    -<%
    -    request.setAttribute("decorator", "none");
    -    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    -    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    -    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
    -%>
    -<p>
    -    <b><i>if</i> tag</b>
    -</p>
    -<p>
    -    The <i>if</i> tag allows you to optionally execute a JSP section. Multiple <i>elseif</i> tags
    -    and one <i>else</i> tag can be associated to an <i>if tag</i>.
    -</p>
    -<p>    
    -    To say hello to John Galt type:
    -</p>
    -<p>
    -    <pre id="example0">
    -        &lt;s:if test="name == 'John Galt'"&gt;
    -            Hi John
    -        &lt;/s:if&gt;
    -        &lt;s:else&gt;
    -            I don't know you!
    -        &lt;/s:else&gt;
    -    </pre>
    -</p>
    -<p>
    -    on the JSP console and hit enter. <a href="#" onclick="execJSP('example0')">Do it for me</a>
    -</p>
    -<p>
    -    <b><i>iterator</i> tag</b>
    -</p>
    -<p>
    -    The <i>iterator</i> tag loops over an <i>Iterable</i> object one object at a time into
    -    the Value Stack (the value will be on top of the stack).
    -</p>
    -<p>    
    -    To print the all the elements in the "bands" property type:
    -</p>
    -<p>
    -    <pre id="example1">
    -        &lt;s:iterator value="bands"&gt;
    -            &lt;s:property /&gt;
    -            &lt;br /&gt;
    -        &lt;/s:iterator&gt;
    -    </pre>
    -</p>
    -<p>
    -    on the JSP console and hit enter. <a href="#" onclick="execJSP('example1')">Do it for me</a>
    -</p>
    -<p>
    -    <a href="#" onclick="window.open('http://struts.apache.org/2.x/docs/property.html')">[More on the <i>if</i> tag]</a>
    -    <a href="#" onclick="window.open('http://struts.apache.org/2.x/docs/iterator.html')">[More on the <i>iterator</i> tag]</a>
    -</p>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/interactive/jsp_3.jsp+0 65 removed
    @@ -1,65 +0,0 @@
    -<%
    -    request.setAttribute("decorator", "none");
    -    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    -    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    -    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
    -%>
    -<p>
    -    <b><i>set</i> tag</b>
    -</p>
    -<p>
    -    The <i>set</i> tag sets the variable with the name specified in the <i>name</i> attribute to 
    -    the value specified in the <i>value</i> attribute in the scope
    -    entered in the <i>scope</i> attribute. The available scopes are:
    -    <ul>
    -        <li>application - application scope according to servlet spec</li>
    -        <li>session - session scope according to servlet spec</li>
    -        <li>request - request scope according to servlet spec</li>
    -        <li>page - page scope according to servlet sepc</li>
    -        <li>action - the value will be set in the request scope and Struts' action context</li>
    -        
    -    </ul>
    -</p>
    -<p>    
    -    This example sets <i>favouriteBand</i> in the request scope to the first element of the <i>bands</i> property:
    -</p>
    -<p>
    -    <pre id="example0">
    -        &lt;s:set name="favouriteBand" value="bands[0]" /&gt;
    -        &lt;s:property value="#favouriteBand" /&gt;
    -    </pre>
    -</p>
    -<p>
    -    <a href="#" onclick="execJSP('example0')">Do it for me</a>
    -</p>
    -<p>
    -    <b><i>url</i> tag</b>
    -</p>
    -<p>
    -    The <i>url</i> tag is used to build urls (who would have guessed!). To build an url mapping to
    -    an action, set the <i>namespace</i> and <i>action</i> attributes. The url will be stored under
    -    the name specified in the <i>id</i> attribute. <b>url tag uses the <i>id</i> attribute while 
    -    the <i>set</i> tag uses name</b>. To specify a value (no action lookup), just use the <i>value</i>
    -    attribute. <i>param</i> tags can be nested inside the <i>url</i> tag to add parameters to the url.
    -</p>
    -<p>    
    -    First link creates a url that maps to an action, second one creates a url to google, passing one parameter:
    -</p>
    -<p>
    -    <pre id="example1">
    -        &lt;s:url id="evalAction" namespace="/nodecorate" action="jspEval" /&gt;
    -        &lt;s:a href="%{#evalAction}" &gt;Eval&lt;/s:a&gt;
    -        
    -        &lt;s:url id="google" value="http://www.google.com" &gt;
    -            &lt;s:param name="q" value="%{'Struts 2'}" /&gt; 
    -        &lt;/s:url&gt;
    -        &lt;s:a href="%{#google}" &gt;Eval&lt;/s:a&gt;
    -    </pre>
    -</p>
    -<p>
    -   <a href="#" onclick="execJSP('example1')">Do it for me</a>
    -</p>
    -<p>
    -    <a href="#" onclick="window.open('http://struts.apache.org/2.x/docs/set.html')">[More on the <i>set</i> tag]</a>
    -    <a href="#" onclick="window.open('http://struts.apache.org/2.x/docs/url.html')">[More on the <i>url</i> tag]</a>
    -</p>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/interactive/jsp_4.jsp+0 16 removed
    @@ -1,16 +0,0 @@
    -<%
    -    request.setAttribute("decorator", "none");
    -    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    -    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    -    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
    -%>
    -<p>
    -    <b>More on JSP tags</b>
    -</p>
    -<p>
    -  Struts 2 provides many more tags which you can learn about 
    -  <a href="#" onclick="window.open('http://cwiki.apache.org/confluence/display/WW/Tag+Reference')">here</a>
    -</p>
    -<br/>
    -You can keep playing with the JSP console or 
    -<a href="#" onclick="startOgnl()">Start OGNL Interactive Demo</a>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/interactive/ognl_0.jsp+0 30 removed
    @@ -1,30 +0,0 @@
    -<%
    -    request.setAttribute("decorator", "none");
    -    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    -    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    -    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
    -%>
    -<p>
    -    <b>Accessing properties</b>
    -</p>
    -<p>
    -    The framework uses a standard naming context to evaluate OGNL expressions. 
    -    The top level object dealing with OGNL is a Map (usually referred as a context map or context).
    -    OGNL has a notion of there being a root (or default) object within the context. 
    -    In OGNL expressions, the properties of the root object can be referenced without any special "marker" notion.
    -    References to other objects are marked with a pound sign (#).
    -    
    -    In this example (and in your JSP pages) the last action executed will be on the top of the stack. 
    -</p>
    -<p>    
    -    <a href="#" onclick="selectClassSrcTab()">This action</a> is available on the third tab above. 
    -    To access the <i>name</i> field type:
    -</p>
    -<p>
    -    <i id="example">
    -        name
    -    </i>
    -</p>
    -<p>
    -    on the OGNL console and hit enter. <a href="#" onclick="execOgnl()">Do it for me</a>
    -</p>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/interactive/ognl_1.jsp+0 28 removed
    @@ -1,28 +0,0 @@
    -<%
    -    request.setAttribute("decorator", "none");
    -    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    -    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    -    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
    -%>
    -<p>
    -    <b>Accessing nested properties</b>
    -</p>
    -<p>
    -    To access nested properties, use the dot "." operator to concatenate the property names. The action
    -    class has a <i>book</i> field, with <i>title</i> and <i>author</i> fields.
    -</p>
    -<p>
    -    To access the name of the book type:
    -</p>
    -<p>
    -    <i id="example">
    -        book.title
    -    </i>
    -</p>
    -<p>
    -    on the OGNL console and hit enter. <a href="#" onclick="execOgnl()">Do it for me</a>
    -</p>
    -<br/>
    -<p>
    -    <a href="#" onclick="window.open('http://www.ognl.org/2.6.9/Documentation/html/LanguageGuide/properties.html')">[More details]</a>
    -</p>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/interactive/ognl_2.jsp+0 43 removed
    @@ -1,43 +0,0 @@
    -<%
    -    request.setAttribute("decorator", "none");
    -    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    -    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    -    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
    -%>
    -<p>
    -    <b>Accessing properties inside Arrays</b>
    -</p>
    -<p>
    -    To access properties inside arrays, use the brackets "[]" operators with the desired index(starting from 0). The action
    -    class has an array of String in the field <i>bands</i>.
    -</p>
    -<p>
    -    To access the second element in the <i>bands</i> array type:
    -</p>
    -<p>
    -    <i id="example0">
    -        bands[1]
    -    </i>
    -</p>
    -<p>
    -    on the OGNL console and hit enter. <a href="#" onclick="execOgnl('example0')">Do it for me</a>
    -</p>
    -<p>
    -    <b>Accessing properties inside Lists</b>
    -</p>
    -<p>Lists can be accessed on the same way. The action class has a List of String on the field <i>movies</i>.</p>
    -<p>
    -    To access the first element in the <i>movies</i> list type:
    -</p>
    -<p>
    -    <i id="example1">
    -        movies[0]
    -    </i>
    -</p>
    -<p>
    -    on the OGNL console and hit enter.  <a href="#" onclick="execOgnl('example1')">Do it for me</a>
    -</p>
    -<br/>
    -<p>
    -    <a href="#" onclick="window.open('http://www.ognl.org/2.6.9/Documentation/html/LanguageGuide/indexing.html#N10184')">[More details]</a>
    -</p>
    
  • apps/showcase/src/main/webapp/WEB-INF/interactive/ognl_3.jsp+0 54 removed
    @@ -1,54 +0,0 @@
    -<%
    -    request.setAttribute("decorator", "none");
    -    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    -    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    -    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
    -%>
    -<p>
    -    <b>Accessing properties inside Maps</b>
    -</p>
    -<p>
    -    To access properties inside maps, use the brackets "[]" operators with the desired key. The action
    -    class has a map of Book objects in the field <i>books</i>.
    -</p>
    -<p>
    -    To access the book with key "Iliad" in the <i>books</i> map type:
    -</p>
    -<p>
    -    <i id="example0">
    -        books['Iliad']
    -    </i>
    -</p>
    -<p>
    -    on the OGNL console and hit enter. <a href="#" onclick="execOgnl('example0')">Do it for me</a>
    -</p>
    -<p>If the key does not have spaces in it, you can access an element in the map, using the dot "." operator.</p>
    -<p>
    -    To access the book with key "Iliad" in the <i>books</i> map type:
    -</p>
    -<p>
    -    <i id="example1">
    -        books.Iliad
    -    </i>
    -</p>
    -<p>
    -    on the OGNL console and hit enter. <a href="#" onclick="execOgnl('example1')">Do it for me</a>
    -</p>
    -<p>
    -    Note that the object returned is of type Book. If you want to access one of its properties, you can do so using the dot
    -    "." operator as you did before.</p>
    -<p>
    -    To access the <i>author</i> property of the book with key "Iliad" in the <i>books</i> map type:
    -</p>
    -<p>
    -    <i id="example2">
    -        books['Iliad'].author
    -    </i>
    -</p>
    -<p>
    -    on the OGNL console and hit enter. <a href="#" onclick="execOgnl('example2')">Do it for me</a>
    -</p>
    -<br/>
    -<p>
    -    <a href="#" onclick="window.open('http://www.ognl.org/2.6.9/Documentation/html/LanguageGuide/indexing.html#N10184')">[More details]</a>
    -</p>
    
  • apps/showcase/src/main/webapp/WEB-INF/interactive/ognl_4.jsp+0 32 removed
    @@ -1,32 +0,0 @@
    -<%
    -    request.setAttribute("decorator", "none");
    -    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    -    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    -    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
    -%>
    -<p>
    -    <b>Accessing properties on the stack</b>
    -</p>
    -<p>
    -   Object that are not on the top of the Value Stack are accessed using the "#name" notation. 
    -   Some objects are always pushed into the stack by Struts, like:
    -</p>
    -<ul>
    -    <li>#application</li>
    -    <li>#session</li>
    -    <li>#request</li>
    -    <li>#parameters</li>
    -</ul>
    -<p>To see the value of the first parameter type:</p>
    -<p>
    -    <i id="example">
    -        #parameters['debug'][0]
    -    </i>
    -</p>
    -<p>
    -    on the OGNL console and hit enter.  <a href="#" onclick="execOgnl()">Do it for me</a>
    -</p>
    -<br/>
    -<p>
    -    <a href="#" onclick="window.open('http://struts.apache.org/2.x/docs/ognl.html')">[More details]</a>
    -</p>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/interactive/ognl_5.jsp+0 25 removed
    @@ -1,25 +0,0 @@
    -<%
    -    request.setAttribute("decorator", "none");
    -    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    -    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    -    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
    -%>
    -<p>
    -    <b>Calling methods</b>
    -</p>
    -<p>
    -  OGNL follows Java's syntax to execute a method.
    -</p>
    -<p>To execute the <i>getTitle()</i> method on the <i>book</i> object type:</p>
    -<p>
    -    <i id="example">
    -        book.getTitle() 
    -    </i>
    -</p>
    -<p>
    -    on the OGNL console and hit enter.  <a href="#" onclick="execOgnl()">Do it for me</a>
    -</p>
    -<br/>
    -<p>
    -    <a href="#" onclick="window.open('http://www.ognl.org/2.6.9/Documentation/html/LanguageGuide/methods.html')">[More details]</a>
    -</p>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/interactive/ognl_6.jsp+0 43 removed
    @@ -1,43 +0,0 @@
    -<%
    -    request.setAttribute("decorator", "none");
    -    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    -    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    -    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
    -%>
    -<p>
    -    <b>Expressions</b>
    -</p>
    -<p>
    -  OGNL supports expressions using primitive values.
    -</p>
    -<p>Arithmetic:</p>
    -<p>
    -    <i id="example0">
    -        (6 - 2)/2
    -    </i>
    -</p>
    -<p>
    -    on the OGNL console and hit enter.  <a href="#" onclick="execOgnl('example0')">Do it for me</a>
    -</p>
    -<p>Logical:</p>
    -<p>
    -    <i id="example1">
    -        (true || false) and true
    -    </i>
    -</p>
    -<p>
    -    on the OGNL console and hit enter.  <a href="#" onclick="execOgnl('example1')">Do it for me</a>
    -</p>
    -<p>Equality:</p>
    -<p>
    -    <i id="example2">
    -        'a' == 'a'
    -    </i>
    -</p>
    -<p>
    -    on the OGNL console and hit enter.  <a href="#" onclick="execOgnl('example2')">Do it for me</a>
    -</p>
    -<p>
    -    OGNL supports many more operators and expressions, see <a href="#" onclick="window.open('http://www.ognl.org/2.6.9/Documentation/html/LanguageGuide/apa.html#operators')">[Operators Reference]</a>
    -    for more details.
    -</p>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/interactive/ognl_7.jsp+0 55 removed
    @@ -1,55 +0,0 @@
    -<%
    -    request.setAttribute("decorator", "none");
    -    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    -    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    -    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
    -%>
    -<p><b>Creating arrays</b></p>
    -<p>
    -    OGNL follows Java syntax to create arrys.
    -</p>
    -<p>
    -    Create an array of integers:
    -</p>
    -<p>
    -    <i id="example0">
    -        new int[] {0, 1, 2}
    -    </i>
    -</p>
    -<p>
    -    on the OGNL console and hit enter. <a href="#" onclick="execOgnl('example0')">Do it for me</a>
    -</p>
    -<p><b>Creating lists</b></p>
    -<p>
    -    To create a list, enclose a list of comma separated expression in a pair of braces.
    -</p>
    -<p>
    -    Create a list of Strings:
    -</p>
    -<p>
    -    <i id="example1">
    -        {'Is', 'there', 'any', 'body', 'out', 'there?'}
    -    </i>
    -</p>
    -<p>
    -    on the OGNL console and hit enter. <a href="#" onclick="execOgnl('example1')">Do it for me</a>
    -</p>
    -<p><b>Creating maps</b></p>
    -<p>
    -    To create a map, use the syntax #@MAP_TYPE@{key:value}.
    -</p>
    -<p>
    -    Create a LinkedHashMap:
    -</p>
    -<p>
    -    <i id="example2">
    -        #@java.util.LinkedHashMap@{'name': 'John Galt', 'job' : 'Engineer'}
    -    </i>
    -</p>
    -<p>
    -    on the OGNL console and hit enter. <a href="#" onclick="execOgnl('example2')">Do it for me</a>
    -</p>
    -<br/>
    -<p>
    -    <a href="#" onclick="window.open('http://www.ognl.org/2.6.9/Documentation/html/LanguageGuide/collectionConstruction.html#listConstruction')">[More details]</a>
    -</p>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/interactive/ognl_8.jsp+0 18 removed
    @@ -1,18 +0,0 @@
    -<%
    -    request.setAttribute("decorator", "none");
    -    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    -    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    -    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
    -%>
    -<p>
    -    <b>More on OGNL</b>
    -</p>
    -<p>
    -  There are a lot of OGNL features that we have not covered on this short tutorial. 
    -</p>
    -<br/>
    -<p>
    -    To learn more see the <a href="#" onclick="window.open('http://www.ognl.org/2.6.9/Documentation/html/LanguageGuide/index.html')">[OGNL Documentation]</a>
    -</p>
    -You can keep playing with the OGNL console or 
    -<a href="#" onclick="startJSP()">Start JSP Interactive Demo</a>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/jsf/employee/edit.jsp+0 113 removed
    @@ -1,113 +0,0 @@
    -<%--
    -
    - 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$
    -
    ---%>
    -
    -<%@ 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>Struts2 Showcase - JSF Integration - Modify Employee</title>
    -		<s:head/>
    -	</head>
    -
    -	<body>
    -
    -	<div class="page-header">
    -		<h1>Modify Employee</h1>
    -	</div>
    -
    -	<div class="container-fluid">
    -		<div class="row-fluid">
    -			<div class="span12">
    -
    -				<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}" styleClass="btn btn-primary"/>
    -					<br/><br/>
    -					<h:outputLink value="list.action" styleClass="btn btn-info">
    -						<h:outputText value="Back"/>
    -					</h:outputLink>
    -				</h:form>
    -			</div>
    -		</div>
    -	</div>
    -	</body>
    -	</html>
    -</f:view>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/jsf/employee/list.jsp+0 75 removed
    @@ -1,75 +0,0 @@
    -<%--
    -
    - 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$
    -
    ---%>
    -
    -<%@ 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>Struts2 Showcase - JSF Integration - Available Employees</title>
    -		<s:head/>
    -	</head>
    -
    -	<body>
    -
    -	<div class="page-header">
    -		<h1>Available Employees</h1>
    -	</div>
    -
    -	<div class="container-fluid">
    -		<div class="row-fluid">
    -			<div class="span12">
    -
    -				<h:dataTable value="#{action.availableItems}" var="e" styleClass="table table-striped table-bordered table-hover table-condensed">
    -					<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" styleClass="btn btn-primary">
    -						<h:outputText value="Create new Employee"/>
    -					</h:outputLink>
    -				</p>
    -			</div>
    -		</div>
    -	</div>
    -	</body>
    -	</html>
    -</f:view>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/jsf/index.jsp+0 35 removed
    @@ -1,35 +0,0 @@
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<html>
    -<head>
    -	<title>Struts2 Showcase - JSF Integration</title>
    -	<s:head/>
    -</head>
    -
    -<body>
    -
    -<div class="page-header">
    -	<h1>JavaServer Faces Integration</h1>
    -</div>
    -
    -<div class="container-fluid">
    -	<div class="row-fluid">
    -		<div class="span12">
    -
    -			<p>
    -				The following pages show how Struts and JSF components can work together,
    -				each doing what they do best.
    -			</p>
    -
    -			<p>
    -			<ul>
    -				<li><s:url var="url" namespace="/jsf/employee" action="list"/><s:a
    -						href="%{url}">List available Employees</s:a></li>
    -				<li><s:url var="url" namespace="/jsf/employee" action="edit"/><s:a
    -						href="%{url}">Create/Edit Employee</s:a></li>
    -			</ul>
    -			</p>
    -		</div>
    -	</div>
    -</div>
    -</body>
    -</html>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/tags/ui/datepicker/index.jsp+0 33 removed
    @@ -1,33 +0,0 @@
    -<%@taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -<html>
    -<head>
    -	<title>Struts2 Showcase - UI Tags - Datepicker Tag</title>
    -	<sx:head extraLocales="en-us,nl-nl,de-de" />
    -</head>
    -<body>
    -<div class="page-header">
    -	<h1>UI Tags - Datepicker Tag</h1>
    -</div>
    -
    -<div class="container-fluid">
    -	<div class="row-fluid">
    -		<div class="span12">
    -			<table>
    -				<sx:datetimepicker label="toggleType='wipe'" value="%{'2006-10-31'}" toggleType="wipe" toggleDuration="300" name="test"/>
    -				<sx:datetimepicker label="toggleType='explode'" value="%{'2006-07-22'}" toggleType="explode" toggleDuration="500" id="dp2"/>
    -				<sx:datetimepicker label="toggleType='fade'" value="%{'2006-06-30'}" toggleType="fade" toggleDuration="500"/>
    -				<sx:datetimepicker label="With value='today'"  name="dddp1" value="%{'today'}" />
    -				<sx:datetimepicker label="US format, empty" name="dddp2" language="en-us" />
    -				<sx:datetimepicker label="US format with initial date of 2006-06-26" name="dddp3" value="%{'2006-06-26'}" language="en-us" />
    -				<sx:datetimepicker label="With initial date of 1969-04-25 and a custom format dd/MM/yyyy" name="dddp5" value="%{'25/04/1969'}" displayFormat="dd/MM/yyyy" />
    -				<sx:datetimepicker label="In German" name="dddp7" value="%{'2006-06-28'}" language="de-de" />
    -				<sx:datetimepicker label="In Dutch"  name="dddp8" value="%{'2006-06-28'}" language="nl-nl" />
    -				<sx:datetimepicker label="US format with initial date of 2006-06-26 and long formatting (parse not supported)" name="dddp12" value="%{'2006-06-26'}" formatLength="long" language="en-us" />
    -				<sx:datetimepicker label="German format with initial date of 2006-06-26 and long formatting (parse not supported)" name="dddp13" value="%{'2006-06-26'}" formatLength="long" language="de" />
    -			</table>
    -		</div>
    -	</div>
    -</div>
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/tags/ui/example.jsp+0 1 modified
    @@ -1,5 +1,4 @@
     <%@taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
     <html>
     <head>
     	<title>Struts2 Showcase - UI Tags Example</title>
    
  • apps/showcase/src/main/webapp/WEB-INF/tags/ui/example.vm+0 3 modified
    @@ -2,7 +2,6 @@
     <head>
     	<title>Struts2 Showcase - UI Tags Example (Velocity)</title>
     	#shead()
    -	#sxhead()
     </head>
     <body>
     <div class="page-header">
    @@ -15,8 +14,6 @@
     
     			#sform ("action=exampleSubmitVelocity" "method=post" "enctype=multipart/form-data")
     			    #stextfield ("label=Name" "name=name")
    -			    #sxdatetimepicker ("label=Birthday" "name=birthday")
    -			    #sxdatetimepicker ("label=Wake up time" "name=wakeup" "type=time")
     			    #stextarea ("label=Biography" "name=bio" "cols=20" "rows=3")
     			    #sselect ("label=Favourite Color" "list={'Red', 'Blue', 'Green'}" "name=favouriteColor" "emptyOption=true" "headerKey=None" "headerValue=None")
     			    #sselect ("label=Favourite Language" "list=favouriteLanguages" "name=favouriteLanguage" "listKey=key" "listValue=description" "emptyOption=true" "headerKey=None" "headerValue=None")
    
  • apps/showcase/src/main/webapp/WEB-INF/tags/ui/staticTreeSelect.jsp+0 11 removed
    @@ -1,11 +0,0 @@
    -<%@taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<%
    -    request.setAttribute("decorator", "none");
    -    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    -    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    -    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
    -%>
    -
    -${parameters.nodeId[0]}
    
  • apps/showcase/src/main/webapp/WEB-INF/tags/ui/timepicker/index.jsp+0 31 removed
    @@ -1,31 +0,0 @@
    -<%@taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -<html>
    -<head>
    -	<title>Struts2 Showcase - UI Tags - Timepicker Tag</title>
    -	<sx:head extraLocales="en-us,nl-nl,de-de" />
    -</head>
    -<body>
    -<div class="page-header">
    -	<h1>UI Tags - Timepicker Tag</h1>
    -</div>
    -
    -<div class="container-fluid">
    -	<div class="row-fluid">
    -		<div class="span12">
    -
    -			<table>
    -				<sx:datetimepicker label="toggleType='wipe'" type="time" value="%{'10:30'}" toggleType="wipe" toggleDuration="300"/>
    -				<sx:datetimepicker label="toggleType='explode'" type="time" value="%{'13:00'}" toggleType="explode" toggleDuration="500"/>
    -				<sx:datetimepicker label="toggleType='fade'" type="time" value="%{'13:00'}" toggleType="fade" toggleDuration="500"/>
    -				<sx:datetimepicker label="With value='today'" name="dddp4" type="time" value="%{'today'}" />
    -				<sx:datetimepicker label="US format, empty" name="dddp5" type="time" language="en-us" />
    -				<sx:datetimepicker label="US format, 13:00 hours" name="dddp6" type="time" value="%{'13:00'}" language="en-us" />
    -				<sx:datetimepicker label="In German" name="dddp7" type="time" value="%{'13:00'}" language="de" />
    -				<sx:datetimepicker label="In Dutch" name="dddp8" type="time" value="%{'13:00'}" language="nl" />
    -			</table>
    -		</div>
    -	</div>
    -</div>
    -</body>
    -</html>
    
  • apps/showcase/src/main/webapp/WEB-INF/tags/ui/treeExampleAjaxDynamic.ftl+0 9 removed
    @@ -1,9 +0,0 @@
    -[
    -<#list category.children as node>
    -  {
    -    label: '${node.name}',
    -    id: '${node.id}',
    -    hasChildren: ${(node.children.size() > 0)?string}
    -  },
    -</#list>
    -] 
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/tags/ui/treeExampleAjaxDynamic.jsp+0 25 removed
    @@ -1,25 +0,0 @@
    -<%@taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -<html>
    -<head>
    -	<title>Struts2 Showcase - UI Tags - Tree Example AJAX (Dynamic)</title>
    -	<sx:head />
    -</head>
    -<body>
    -<div class="page-header">
    -	<h1>UI Tags - Tree Example AJAX (Dynamic)</h1>
    -</div>
    -
    -<div class="container-fluid">
    -	<div class="row-fluid">
    -		<div class="span12">
    -
    -			<s:url var="nodesUrl" namespace="/nodecorate" action="getNodes" />
    -			<div style="float:left; margin-right: 50px;">
    -			    <sx:tree id="tree" href="%{#nodesUrl}" />
    -			</div>
    -		</div>
    -	</div>
    -</div>
    -</body>
    -</html>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/tags/ui/treeExampleDynamic.jsp+0 54 removed
    @@ -1,54 +0,0 @@
    -<%@taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -<html>
    -<head>
    -	<title>Struts2 Showcase - UI Tags - Tree Example (Dynamic)</title>
    -	<sx:head/>
    -</head>
    -<body>
    -<div class="page-header">
    -	<h1>UI Tags - Tree Example (Dynamic)</h1>
    -</div>
    -
    -<div class="container-fluid">
    -	<div class="row-fluid">
    -		<div class="span12">
    -
    -			<!-- START SNIPPET: treeExampleDynamicJsp -->
    -
    -			<script language="JavaScript" type="text/javascript">
    -			    dojo.event.topic.subscribe("treeSelected", function treeNodeSelected(node) {
    -			        dojo.io.bind({
    -			            url: "<s:url value='/tags/ui/ajax/dynamicTreeSelectAction.action'/>?nodeId="+node.node.widgetId,
    -			            load: function(type, data, evt) {
    -			                var divDisplay = dojo.byId("displayId");
    -			                divDisplay.innerHTML=data;
    -			            },
    -			            mimeType: "text/html"
    -			        });
    -			    });
    -			</script>
    -
    -
    -
    -			<div style="float:left; margin-right: 50px;">
    -			<sx:tree
    -			    id="tree"
    -			    rootNode="%{treeRootNode}"
    -			    childCollectionProperty="children"
    -			    nodeIdProperty="id"
    -			    nodeTitleProperty="name"
    -			    treeSelectedTopic="treeSelected">
    -			</sx:tree>
    -			</div>
    -
    -			<div id="displayId">
    -			Please click on any of the tree nodes.
    -			</div>
    -
    -			<!-- END SNIPPET: treeExampleDynamicJsp -->
    -		</div>
    -	</div>
    -</div>
    -</body>
    -</html>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/tags/ui/treeExampleStatic.jsp+0 61 removed
    @@ -1,61 +0,0 @@
    -<%@taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -<html>
    -<head>
    -	<title>Struts2 Showcase - UI Tags - Tree Example (Static)</title>
    -<sx:head/>
    -</head>
    -<body>
    -<div class="page-header">
    -	<h1>UI Tags - Tree Example (Static)</h1>
    -</div>
    -
    -<div class="container-fluid">
    -	<div class="row-fluid">
    -		<div class="span12">
    -
    -			<!-- START SNIPPET: treeExampleStaticJsp -->
    -
    -			<script language="JavaScript" type="text/javascript">
    -			    dojo.event.topic.subscribe("treeSelected", function treeNodeSelected(node) {
    -			        dojo.io.bind({
    -			            url: "<s:url value='/tags/ui/ajax/staticTreeSelectAction.action'/>?nodeId="+node.node.title,
    -			            load: function(type, data, evt) {
    -			                var divDisplay = dojo.byId("displayIt");
    -			                divDisplay.innerHTML=data;
    -			            },
    -			            mimeType: "text/html"
    -			        });
    -			    });
    -			</script>
    -
    -
    -			<div style="float:left; margin-right: 50px;">
    -			<sx:tree label="parent"  templateCssPath="/struts/tree.css"
    -			showRootGrid="true" showGrid="true" treeSelectedTopic="treeSelected">
    -			    <sx:treenode label="child1" >
    -			        <sx:treenode label="grandchild1" id="grandchild1Id"/>
    -			        <sx:treenode label="grandchild2" id="grandchild2Id"/>
    -			        <sx:treenode label="grandchild3" id="grandchild3Id"/>
    -			    </sx:treenode>
    -			    <sx:treenode label="child2" id="child2Id"/>
    -			    <sx:treenode label="child3" id="child3Id"/>
    -			    <sx:treenode label="child4" id="child4Id"/>
    -			    <sx:treenode label="child5" id="child5Id">
    -			        <sx:treenode label="gChild1" id="gChild1Id"/>
    -			        <sx:treenode label="gChild2" id="gChild2Id"/>
    -			    </sx:treenode>
    -			</sx:tree>
    -			</div>
    -
    -
    -			<div id="displayIt">
    -			Please click on any node on the tree.
    -			</div>
    -
    -			<!-- END SNIPPET: treeExampleStaticJsp  -->
    -		</div>
    -	</div>
    -</div>
    -</body>
    -</html>
    \ No newline at end of file
    
  • apps/showcase/src/main/webapp/WEB-INF/validation/index.jsp+0 2 modified
    @@ -24,7 +24,6 @@
     			<s:url var="quizBasic" namespace="/validation" action="quizBasic" method="input"/>
     			<s:url var="quizClient" namespace="/validation" action="quizClient" method="input"/>
     			<s:url var="quizClientCss" namespace="/validation" action="quizClientCss" method="input"/>
    -			<s:url var="quizAjax" namespace="/validation" action="quizAjax" method="input"/>
     			<s:url var="fieldValidatorUrl" action="showFieldValidatorsExamples" namespace="/validation"/>
     			<s:url var="nonFieldValidatorUrl" action="showNonFieldValidatorsExamples" namespace="/validation"/>
     			<s:url var="visitorValidatorUrl" action="showVisitorValidatorsExamples" namespace="/validation"/>
    @@ -37,7 +36,6 @@
     				<li><s:a href="%{clientSideValidationUrl}">Field Validators with client-side JavaScript</s:a></li>
     				<li><s:a href="%{nonFieldValidatorUrl}">Non Field Validator</s:a></li>
     				<li><s:a href="%{storeMessageAcrossRequestExample}">Store across request using MessageStoreInterceptor (Example)</s:a></li>
    -				<li><s:a href="%{quizAjax}">Validation (ajax)</s:a></li>
     				<li><s:a href="%{quizBasic}">Validation (basic)</s:a></li>
     				<li><s:a href="%{quizClient}">Validation (client)</s:a></li>
     				<li><s:a href="%{quizClientCss}">Validation (client using css_xhtml theme)</s:a></li>
    
  • apps/showcase/src/main/webapp/WEB-INF/validation/quiz-ajax.jsp+0 104 removed
    @@ -1,104 +0,0 @@
    -<%@ taglib prefix="s" uri="/struts-tags" %>
    -<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
    -
    -<!-- START SNIPPET: ajaxValidation -->
    -
    -<html>
    -<head>
    -	<title>Struts2 Showcase - Validation - Ajax</title>
    -	<sx:head cache="true" compressed="true"/>
    -</head>
    -
    -<s:url var="url" namespace="/validation" action="quizAjax"/>
    -
    -<body>
    -
    -<div class="page-header">
    -	<h1>AJAX validation Example</h1>
    -</div>
    -
    -<div class="container-fluid">
    -	<div class="row-fluid">
    -		<div class="span12">
    -			<h5>1.Use AJAX validation, and AJAX request (ajaxAfterValidation="true"), if validation succeeds</h5>
    -
    -			<div id="response" class="well">
    -				Response goes here
    -			</div>
    -
    -			<br/>
    -
    -			<s:form method="post" theme="xhtml" namespace="/nodecorate" action="quizAjax" id="form">
    -				<s:textfield label="Name" name="name"/>
    -				<s:textfield label="Age" name="age"/>
    -				<s:textfield label="Favorite color" name="answer"/>
    -				<sx:submit
    -						validate="true"
    -						ajaxAfterValidation="true"
    -						targets="response"
    -						showLoadingText="false"
    -						cssClass="btn btn-primary"/>
    -			</s:form>
    -
    -			<sx:a
    -					formId="form"
    -					validate="true"
    -					ajaxAfterValidation="true"
    -					targets="response"
    -					showLoadingText="false"
    -					cssClass="btn btn-primary">Submit Form with a link</sx:a>
    -			<br/><br/>
    -
    -			<input type="checkbox" id="checkbox">Submit Form listening to an event on an element (check to submit)
    -			<sx:bind
    -					id="bind"
    -					formId="form"
    -					sources="checkbox"
    -					validate="true"
    -					events="onchange"
    -					ajaxAfterValidation="true"
    -					targets="response"
    -					showLoadingText="false"/>
    -
    -			<br/><br/><br/><br/>
    -
    -			<h5>2.Use AJAX validation, and regular request (ajaxAfterValidation="false", default), if validation
    -				succeeds</h5>
    -			<br/>
    -
    -			<s:form method="post" theme="xhtml" namespace="/nodecorate" action="quizAjax" id="form2">
    -				<s:textfield label="Name" name="name"/>
    -				<s:textfield label="Age" name="age"/>
    -				<s:textfield label="Favorite color" name="answer"/>
    -				<sx:submit
    -						validate="true"
    -						ajaxAfterValidation="false"
    -						showLoadingText="false"
    -						cssClass="btn btn-primary"/>
    -			</s:form>
    -
    -			<sx:a
    -					formId="form2"
    -					validate="true"
    -					ajaxAfterValidation="false"
    -					showLoadingText="false"
    -					cssClass="btn btn-primary">Submit Form with a link</sx:a>
    -			<br/><br/>
    -
    -			<input type="checkbox" id="checkbox2">Submit Form listening to an event on an element (check to submit)
    -			<sx:bind
    -					formId="form2"
    -					sources="checkbox2"
    -					validate="true"
    -					events="onchange"
    -					ajaxAfterValidation="false"
    -					showLoadingText="false"/>
    -
    -
    -			<s:include value="footer.jsp"/>
    -		</div>
    -	</div>
    -</div>
    -</body>
    -</html>
    -<!-- END SNIPPET: ajaxValidation -->
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

14

News mentions

0

No linked articles in our index yet.