Fixing some regressions, deleting unnecessary JSP code.
diff --git a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryEdit.java b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryEdit.java
index cebbbf0..17dc99a 100644
--- a/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryEdit.java
+++ b/app/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/CategoryEdit.java
@@ -30,7 +30,6 @@
 import org.apache.roller.weblogger.pojos.WeblogPermission;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.cache.CacheManager;
-import org.apache.struts2.convention.annotation.AllowedMethods;
 import org.apache.struts2.interceptor.validation.SkipValidation;
 
 
diff --git a/app/src/main/webapp/WEB-INF/jsps/admin/PingTargetEdit.jsp b/app/src/main/webapp/WEB-INF/jsps/admin/PingTargetEdit.jsp
deleted file mode 100644
index 48ee4ef..0000000
--- a/app/src/main/webapp/WEB-INF/jsps/admin/PingTargetEdit.jsp
+++ /dev/null
@@ -1,78 +0,0 @@
-<%--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  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.  For additional information regarding
-  copyright in this work, please see the NOTICE file in the top level
-  directory of this distribution.
---%>
-<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
-
-<%-- Titling, processing actions different between add and edit --%>
-<s:if test="actionName == 'commonPingTargetEdit'">
-    <s:set var="mainAction">commonPingTargetEdit</s:set>
-    <s:set var="subtitleKey">pingTargetEdit.subtitle</s:set>
-</s:if>
-<s:else>
-    <s:set var="mainAction">commonPingTargetAdd</s:set>
-    <s:set var="subtitleKey">pingTargetAdd.subtitle</s:set>
-</s:else>
-
-<p class="subtitle"> <s:text name="%{#subtitleKey}"/> </p>
-
-<s:form theme="bootstrap" cssClass="form-horizontal">
-    <s:hidden name="salt"/>
-
-    <s:if test="actionName == 'commonPingTargetEdit'"> <s:hidden name="bean.id"/> </s:if>
-
-    <s:textfield name="bean.name" size="30" maxlength="30" style="width:50%"
-        onchange="validate()" onkeyup="validate()"
-        label="%{getText('generic.name')}" />
-
-    <s:textfield name="bean.pingUrl" size="100" maxlength="255" style="width:50%"
-        onchange="validate()" onkeyup="validate()"
-        label="%{getText('pingTarget.pingUrl')}" />
-
-    <s:submit id="save-button" cssClass="btn btn-default"
-        value="%{getText('generic.save')}" action="%{#mainAction}!save"/>
-
-    <s:submit cssClass="btn" value="%{getText('generic.cancel')}" action="commonPingTargets"/>
-
-</s:form>
-
-<script type="application/javascript">
-
-    function validate() {
-        var savePingTargetButton = $('#save-button:first');
-        var name = $('#commonPingTargetAdd_bean_name:first').val().trim();
-        var url = $('#commonPingTargetAdd_bean_pingUrl:first').val().trim();
-        if ( name.length > 0 && url.length > 0 && isValidUrl(url) ) {
-            savePingTargetButton.attr("disabled", false);
-        } else {
-            savePingTargetButton.attr("disabled", true);
-        }
-    }
-
-    function isValidUrl(url) {
-        if (/^(http|https|ftp):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/i.test(url)) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    $( document ).ready(function() {
-        var savePingTargetButton = $('#save-button:first');
-        savePingTargetButton.attr("disabled", true);
-    });
-
-</script>
diff --git a/app/src/main/webapp/WEB-INF/jsps/editor/BookmarkEdit.jsp b/app/src/main/webapp/WEB-INF/jsps/editor/BookmarkEdit.jsp
deleted file mode 100644
index 60cade0..0000000
--- a/app/src/main/webapp/WEB-INF/jsps/editor/BookmarkEdit.jsp
+++ /dev/null
@@ -1,98 +0,0 @@
-<%--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  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.  For additional information regarding
-  copyright in this work, please see the NOTICE file in the top level
-  directory of this distribution.
---%>
-<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
-
-]
-<%--
-WARNING: this JSP page is not visible to end users as now, with
-Struts Bootstrap, the BookmarkEdit#save action is called via AJAX.
---%>
-
-
-<%-- Titling, processing actions different between add and edit --%>
-<s:if test="actionName == 'bookmarkEdit'">
-    <s:set var="subtitleKey">bookmarkForm.edit.subtitle</s:set>
-    <s:set var="mainAction">bookmarkEdit</s:set>
-</s:if>
-<s:else>
-    <s:set var="subtitleKey">bookmarkForm.add.subtitle</s:set>
-    <s:set var="mainAction">bookmarkAdd</s:set>
-</s:else>
-
-<p class="subtitle">
-    <s:text name="%{#subtitleKey}" >
-        <s:param value="bookmark.folder.name"/>
-    </s:text>
-</p>
-
-<p class="pagetip">
-    <s:text name="bookmarkForm.requiredFields">
-        <s:param><s:text name="generic.name"/></s:param>
-        <s:param><s:text name="bookmarkForm.url"/></s:param>
-    </s:text>
-</p>
-
-<s:form>
-    <s:hidden name="salt" />
-    <s:hidden name="weblog" />
-    <%--
-        Edit action uses folderId for redirection back to proper bookmarks folder on cancel
-        (as configured in struts.xml); add action also, plus to know which folder to put new
-        bookmark in.
-    --%>
-    <s:hidden name="folderId" />
-    <s:if test="actionName == 'bookmarkEdit'">
-        <%-- bean for bookmark add does not have a bean id yet --%>
-        <s:hidden name="bean.id" />
-    </s:if>
-
-    <table>
-
-        <tr>
-            <td><s:text name="generic.name" /></td>
-            <td><s:textfield name="bean.name" maxlength="255" size="70" style="width:50%"/></td>
-        </tr>
-
-        <tr>
-            <td><s:text name="bookmarkForm.url" /></td>
-            <td><s:textfield name="bean.url" maxlength="255" size="70" style="width:50%"/></td>
-        </tr>
-
-        <tr>
-            <td><s:text name="bookmarkForm.rssUrl" /></td>
-            <td><s:textfield name="bean.feedUrl" maxlength="255" size="70" style="width:50%"/></td>
-        </tr>
-
-        <tr>
-            <td><s:text name="generic.description" /></td>
-            <td><s:textfield name="bean.description" maxlength="255" size="70" style="width:50%"/></td>
-        </tr>
-
-        <tr>
-            <td><s:text name="bookmarkForm.image" /></td>
-            <td><s:textfield name="bean.image" maxlength="255" size="70" style="width:50%"/></td>
-        </tr>
-
-    </table>
-
-    <p>
-        <s:submit value="%{getText('generic.save')}" action="%{#mainAction}!save"/>
-        <s:submit value="%{getText('generic.cancel')}" action="bookmarkEdit!cancel" />
-    </p>
-
-</s:form>
\ No newline at end of file
diff --git a/app/src/main/webapp/WEB-INF/jsps/editor/Categories.jsp b/app/src/main/webapp/WEB-INF/jsps/editor/Categories.jsp
index 8bcc831..39ccd7b 100644
--- a/app/src/main/webapp/WEB-INF/jsps/editor/Categories.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/editor/Categories.jsp
@@ -51,10 +51,10 @@
 
                     <td align="center">
 
-                        <s:set name="categoryId"    value="#category.id" />
-                        <s:set name="categoryName"  value="#category.name" />
-                        <s:set name="categoryDesc"  value="#category.description" />
-                        <s:set name="categoryImage" value="#category.image" />
+                        <s:set var="categoryId"    value="#category.id" />
+                        <s:set var="categoryName"  value="#category.name" />
+                        <s:set var="categoryDesc"  value="#category.description" />
+                        <s:set var="categoryImage" value="#category.image" />
                         <a href="#" onclick="showCategoryEditModal(
                                 '<s:property value="categoryId" />',
                                 '<s:property value="categoryName"/>',
@@ -68,9 +68,9 @@
                     <td class="rollertable" align="center">
                         <s:if test="AllCategories.size() > 1">
 
-                            <s:set name="categoryId"    value="#category.id" />
-                            <s:set name="categoryName"  value="#category.name" />
-                            <s:set name="categoryInUse" value="#category.inUse.toString()" />
+                            <s:set var="categoryId"    value="#category.id" />
+                            <s:set var="categoryName"  value="#category.name" />
+                            <s:set var="categoryInUse" value="#category.inUse.toString()" />
                             <a href="#" onclick="showCategoryDeleteModal(
                                     '<s:property value="categoryId" />',
                                     '<s:property value="categoryName" />',
@@ -111,7 +111,7 @@
             </div>
 
             <div class="modal-body">
-                <s:form action="#" id="categoryEditForm" theme="bootstrap" cssClass="form-horizontal">
+                <s:form action="categoryEdit" id="categoryEditForm" theme="bootstrap" cssClass="form-horizontal">
                     <s:hidden name="salt"/>
                     <s:hidden name="weblog"/>
                     <s:hidden name="bean.id"/>
diff --git a/app/src/main/webapp/WEB-INF/jsps/editor/CategoriesSidebar.jsp b/app/src/main/webapp/WEB-INF/jsps/editor/CategoriesSidebar.jsp
index e9cb78f..7f2d449 100644
--- a/app/src/main/webapp/WEB-INF/jsps/editor/CategoriesSidebar.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/editor/CategoriesSidebar.jsp
@@ -21,10 +21,10 @@
 <hr size="1" noshade="noshade"/>
 
 <p>
-    <s:set name="categoryId" value="#bean.id"/>
-    <s:set name="categoryName" value="#post.name"/>
-    <s:set name="categoryDesc" value="#post.description"/>
-    <s:set name="categoryImage" value="#post.image"/>
+    <s:set var="categoryId" value="#bean.id"/>
+    <s:set var="categoryName" value="#post.name"/>
+    <s:set var="categoryDesc" value="#post.description"/>
+    <s:set var="categoryImage" value="#post.image"/>
 
     <a href="#" onclick="showCategoryAddModal()">
         <span class="glyphicon glyphicon-plus"></span>
diff --git a/app/src/main/webapp/WEB-INF/jsps/editor/FolderEdit.jsp b/app/src/main/webapp/WEB-INF/jsps/editor/FolderEdit.jsp
deleted file mode 100644
index 5bc80b8..0000000
--- a/app/src/main/webapp/WEB-INF/jsps/editor/FolderEdit.jsp
+++ /dev/null
@@ -1,65 +0,0 @@
-<%-- Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  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.  For additional information regarding
-  copyright in this work, please see the NOTICE file in the top level
-  directory of this distribution.
---%>
-<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
-
-
-<%--
-WARNING: this JSP page is not visible to end users as now, with
-Struts Bootstrap, the FolderEdit#save action is called via AJAX.
---%>
-
-
-<%-- Titling, processing actions different between add and edit --%>
-<s:if test="actionName == 'folderEdit'">
-    <s:set var="subtitleKey">folderForm.edit.subtitle</s:set>
-    <s:set var="mainAction">folderEdit</s:set>
-</s:if>
-<s:else>
-    <s:set var="subtitleKey">folderForm.add.subtitle</s:set>
-    <s:set var="mainAction">folderAdd</s:set>
-</s:else>
-
-
-<p class="subtitle">
-    <s:text name="%{#subtitleKey}" >
-        <s:param value="folder.name" />
-    </s:text>
-</p>
-
-<s:form>
-    <s:hidden name="salt" />
-    <s:hidden name="weblog" />
-    <%-- folderId needed on cancel to determine folder to return to (see struts.xml) --%>
-    <s:hidden name="folderId" value="%{folderId}" />
-    <s:if test="actionName == 'folderEdit'">
-        <%-- bean for folder add does not have a bean id yet --%>
-        <s:hidden name="bean.id" />
-    </s:if>
-
-    <table>
-        <tr>
-            <td><s:text name="generic.name" /></td>
-            <td><s:textfield name="bean.name" size="70" maxlength="255" /></td>
-        </tr>
-    </table>
-
-    <p>
-        <s:submit value="%{getText('generic.save')}" action="%{#mainAction}!save"/>
-        <s:submit value="%{getText('generic.cancel')}" action="folderEdit!cancel" />
-    </p>
-
-</s:form>
diff --git a/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-tabbedpage.jsp b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-tabbedpage.jsp
index 5b7da0b..6bd6ca2 100644
--- a/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-tabbedpage.jsp
+++ b/app/src/main/webapp/WEB-INF/jsps/tiles/tiles-tabbedpage.jsp
@@ -1,3 +1,4 @@
+<%@ taglib prefix="tilesx" uri="http://tiles.apache.org/tags-tiles-extras" %>
 <%--
   Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  The ASF licenses this file to You
@@ -30,7 +31,8 @@
 
 <tiles:insertAttribute name="bannerStatus" />
 
-<tilesx:useAttribute name="sidebar" />
+<tilesx:useAttribute name="sidebar" id="sidebar" classname="java.lang.String" />
+
 
 <div class="row">
 
@@ -53,7 +55,7 @@
             </div>
         </div>
 
-        <c:if test="${sidebar} != '/WEB-INF/jsps/tiles/empty.jsp'}">
+        <c:if test="${sidebar != '/WEB-INF/jsps/tiles/empty.jsp'}">
             <s:property value="sidebar" />
             <div class="panel panel-default">
                 <div class="panel-body">
diff --git a/app/src/main/webapp/WEB-INF/tiles.xml b/app/src/main/webapp/WEB-INF/tiles.xml
index 21371a4..1968f67 100644
--- a/app/src/main/webapp/WEB-INF/tiles.xml
+++ b/app/src/main/webapp/WEB-INF/tiles.xml
@@ -191,13 +191,9 @@
     <definition name=".PingTargets" extends=".tiles-tabbedpage" >
         <put-attribute name="content" value="/WEB-INF/jsps/admin/PingTargets.jsp" />
     </definition>
-    
-    <definition name=".PingTargetConfirm" extends=".tiles-tabbedpage" >
-        <put-attribute name="content" value="/WEB-INF/jsps/admin/PingTargetRemove.jsp" />
-    </definition>
-    
+
     <definition name=".PingTargetEdit" extends=".tiles-tabbedpage" >
-        <put-attribute name="content" value="/WEB-INF/jsps/admin/PingTargetEdit.jsp" />
+        <put-attribute name="content" value="/WEB-INF/jsps/tiles/empty.jsp" />
     </definition>
     
     <definition name=".CacheInfo" extends=".tiles-tabbedpage" >
@@ -301,6 +297,16 @@
         <put-attribute name="styles" value="/WEB-INF/jsps/tiles/empty.jsp" />
     </definition>
 
+    <definition name=".CategoryEdit" extends=".tiles-tabbedpage" >
+        <put-attribute name="content" value="/WEB-INF/jsps/tiles/empty.jsp" />
+        <put-attribute name="styles" value="/WEB-INF/jsps/tiles/empty.jsp" />
+    </definition>
+
+    <definition name=".CategoryRemove" extends=".tiles-tabbedpage" >
+        <put-attribute name="content" value="/WEB-INF/jsps/tiles/empty.jsp" />
+        <put-attribute name="styles" value="/WEB-INF/jsps/tiles/empty.jsp" />
+    </definition>
+
     <definition name=".Bookmarks" extends=".tiles-tabbedpage" >
         <put-attribute name="content" value="/WEB-INF/jsps/editor/Bookmarks.jsp" />
         <put-attribute name="sidebar" value="/WEB-INF/jsps/editor/BookmarksSidebar.jsp" />
@@ -313,12 +319,12 @@
     </definition>
 
     <definition name=".BookmarkEdit" extends=".tiles-tabbedpage" >
-        <put-attribute name="content" value="/WEB-INF/jsps/editor/BookmarkEdit.jsp" />
+        <put-attribute name="content" value="/WEB-INF/jsps/tiles/empty.jsp" />
         <put-attribute name="styles" value="/WEB-INF/jsps/tiles/empty.jsp" />
     </definition>
 
     <definition name=".FolderEdit" extends=".tiles-tabbedpage" >
-        <put-attribute name="content" value="/WEB-INF/jsps/editor/FolderEdit.jsp" />
+        <put-attribute name="content" value="/WEB-INF/jsps/tiles/empty.jsp" />
         <put-attribute name="styles" value="/WEB-INF/jsps/tiles/empty.jsp" />
     </definition>