Ну, хорошо, я мог бы также ответить на мой собственный вопрос :-)
Мне пришлось создавать свои собственные версии TagsSupport, FormTag и LinkTag на основе (не расширяя) кода моста Struts.
Я изменил методы TagsSupport.getUrl () и TagsSupport.getFormTagRenderFormStartElement (), чтобы принять параметр WindowState и использовать его при создании URL-адресов рендеринга и действий.
public static String getURL(PageContext pageContext, String url, PortletURLTypes.URLType type, WindowState ws)
...
if ( type.equals(PortletURLTypes.URLType.ACTION) )
{
final PortletURL portletURL = StrutsPortletURL.createActionURL(pageContext.getRequest(), url);
if (ws!=null) {
try {
portletURL.setWindowState(ws);
}
catch (WindowStateException e) {
e.printStackTrace();
}
}
return portletURL.toString();
}
else if ( type.equals(PortletURLTypes.URLType.RENDER) )
{
final PortletURL portletURL = StrutsPortletURL.createRenderURL(pageContext.getRequest(), url);
if (ws!=null) {
try {
portletURL.setWindowState(ws);
}
catch (WindowStateException e) {
e.printStackTrace();
}
}
return portletURL.toString();
}
...
и
public static String getFormTagRenderFormStartElement(PageContext pageContext, String formStartElement, WindowState ws)
{
if ( PortletServlet.isPortletRequest(pageContext.getRequest()))
{
int actionURLStart = formStartElement.indexOf("action=") + 8;
int actionURLEnd = formStartElement.indexOf('"', actionURLStart);
String actionURL = formStartElement.substring(actionURLStart,
actionURLEnd);
final PortletURL portletURL = StrutsPortletURL.createActionURL(pageContext.getRequest(),
actionURL);
if (ws!=null) {
try {
portletURL.setWindowState(ws);
}
catch (WindowStateException e) {
e.printStackTrace();
}
}
formStartElement = formStartElement.substring(0, actionURLStart)
+ portletURL.toString()
+ formStartElement.substring(actionURLEnd);
}
return formStartElement;
}
Затем я изменил FormTag и LinkTag для принятия атрибута WindowState и передачи его методам в TagsSupport.
private String windowState;
public String getWindowState() {
return windowState;
}
public void setWindowState(String windowState) {
this.windowState = windowState;
}
и
url = TagsSupport.getURL(pageContext, url, urlType, new WindowState(getWindowState()));
Очевидно, тогда нужно было tld для ссылки на мои измененные теги.
Поставляется в виде патча PB-91 (также включает исправление для изменения режима портлета) для проекта моста Struts.