Из вопроса не совсем ясно, являются ли эти два представления совершенно разными, или у клиентов есть что-то дополнительное, или у сотрудников есть что-то дополнительное. Если в одной роли есть что-то лишнее, просто поместите общие части в один файл, а необычные части - в свои собственные файлы и используйте включения или плитки (или что-то подобное) для объединения JSP-страниц в страницу.
Если два представления полностью различаются, они должны быть отдельными JSP, и в этом случае действие может пересылать в соответствующее представление, основанное на роли, как предложил Rich Kroll.
Что касается вашего комментария с вопросом о дублировании определений результатов, когда у вас есть две отдельные взаимоисключающие функции, вам нужны два пути кода. Лучшее, что вы можете сделать, это вынести общность в файлы с общим кодом.
Один из способов упростить код действия, если вы часто делаете этот шаблон, - это выбрать ActionForward, который лучше всего соответствует желаемому форвардному имени.
Итак, если бы вы обычно делали
return mapping.findForward("success");
Вы можете сделать что-то вроде этого
ActionForward defaultMapping = mapping.findForward("success");
ActionForward roleMapping = mapping.findForward(user.getRole() + "_success");
if (roleMapping != null) {
return roleMapping ;
} else {
return defaultMapping;
}
Поместите это в метод в вашем базовом классе, и тогда вашим действиям не нужно знать, к какому виду они собираются. Тогда ваш Struts-config может быть примерно таким:
<action path="/home" class="HomeAction">
<forward name="success" path="home.jsp"/>
</action>
<action path="/viewOrder" class="ViewOrderAction">
<forward name="customer_success" path="customer_order.jsp"/>
<forward name="employee_success" path="employee_order.jsp"/>
</action>
В этом случае вы не будете динамически искать jsps по имени, чтобы определить, существуют они или нет, но по крайней мере вы можете сохранить код действия простым.