Apache Tiles, предположительно, решает эту проблему, он позволяет создавать шаблоны и повторно использовать компоненты JSPX.
Обновленный ответ:
В вашем views.xml у вас будет что-то вроде следующего:
<definition extends="error" name="dataAccessFailure">
<put-attribute name="body" value="/WEB-INF/views/dataAccessFailure.jspx"/>
</definition>
<definition extends="default" name="index">
<put-attribute name="body" value="/WEB-INF/views/body/index.jspx"/>
<put-attribute name="side" value="/WEB-INF/views/side/index.jspx"/>
</definition>
И ошибка, и настройка по умолчанию - это макеты, которые я определил в каталоге макетов, ошибка - это макет с одним столбцом, а по умолчанию - макет с двумя столбцами.
Также в каталоге раскладок находится файл layouts.xml:
<tiles-definitions>
<definition name="default" template="/WEB-INF/layouts/default.jspx">
<put-attribute name="header" value="/WEB-INF/views/header.jspx" />
<put-attribute name="menu" value="/WEB-INF/views/navigation.jspx" />
<put-attribute name="footer" value="/WEB-INF/views/footer.jspx" />
</definition>
<definition name="error" template="/WEB-INF/layouts/error.jspx">
<put-attribute name="header" value="/WEB-INF/views/header.jspx" />
<put-attribute name="menu" value="/WEB-INF/views/navigation.jspx" />
<put-attribute name="footer" value="/WEB-INF/views/footer.jspx" />
</definition>
</tiles-definitions>
Я лично не выполнял интеграцию Apache тайлов вручную, я просто использую Spring ROO, чтобы сгенерировать для меня полный стек, а затем добавлять / удалять вещи по мере необходимости.