Я разрабатываю портлет для WebSphere Portal 6.1, с JSP / JSTL, чистым javascript, без AJAX-фреймворков , с JSP, который показывает форму обратной связи для отправки и, при отправке, перенаправляет на другой JSPчтобы показать пользователю успешность операции.
Я использую javascript для получения значений полей формы с помощью функции document.getElementById()
.Например:
var valorAsunto = document.getElementById("asunto").value;
, где "asunto" - это идентификатор текстового поля в моей форме.Кроме того, моя форма имеет следующую структуру:
<form name="formularioCorreo" id="formularioCorreo" method="post" action="<portlet:renderURL><portlet:param name="nextTask" value="sendFeedback"/></portlet:renderURL>">
Это работает нормально, но у меня возникают проблемы при попытке создать тег <portlet:renderURL>
из этих значений javascript: когда я пытаюсь объединить строку дляrenderURL и затем переназначение для формирования действия, подобного этому:
var valorAction = '<portlet:renderURL><portlet:param name="nextTask" value="sendFeedback"/><portlet:param name="asunto" value="'+valorAsunto+'"/></portlet:renderURL>';
document.formularioCorreo.action = valorAction;
document.formularioCorreo.submit();
Полученная строка при развертывании приложения имеет структуру:
/ wps / myportal / <portletpath>
/! ut / p / c5 / <a very long random sequence of
numbers and letters>
/
Таким образом, невозможно определить, где находятся значения параметров, но если я распечатаю присвоенные значения, это показывает что-то вроде:
asunto: '+ valorAsunto +'
вместо
asunto: это образец темы
Я былпытаясь использовать некоторые другие способы объединения строк;например, с StringBuffer
, как показано на http://www.java2s.com/Tutorial/JavaScript/0120__String/StringBufferbasedonarray.htm
, а также с функциями javascript, такими как encodeURI()
/ decodeURI()
, replace()
и т. д., но я просто не могу получить ни URL справильные значения параметров или URL-адрес, закодированный в показанной выше структуре (с длинной последовательностью символов).
Иногда мне удается получить правильные значения параметров, вручную заменяя в назначении valorAction все "<
"для" <
"и все" >
"для" >
"до конкатенации, а затем выполнить следующее:
var valorAction = valorAction.replace(/</g,"<").replace(/>/g,">");
Затем я получаю следующую строку:
<portlet:renderURL><portlet:param name="nextTask" value="sendFeedback"/><portlet:param name="asunto" value="this is a sample subject"/></portlet:renderURL>
, что в порядке, но когда он должен перенаправить на страницу результатов, он показывает ошибку, подобную этой
Ошибка 404: EJPEI0088E: Ресурс <portlet:renderURL><portlet:param
name="nextTask" value="sendFeedback"/><portlet:param name="asunto"
value="this is a sample subject"/></portlet:renderURL>
не можетбыть найденным.
- Кто-нибудь знает, как преобразовать эту строку в правильный формат для рендеринга?
- Кто-нибудь знает какой-либо другой способ "вставить" значения этого параметраto renderURL?
- Я бы тоже хотел знатьесли возможно передать значения этого параметра из javascript в JSP, чтобы я мог поместить эти значения в
HashMap
параметров для использования с методом PortletURLHelper.generateSinglePortletRenderURL()
, в случае если первое невозможно.
Спасибо.
Обновление 1:
В моем doView()
я использую следующее, чтобы сделатьперенаправление:
String targetJsp = "/_Feedback/jsp/html/FeedbackPortletView.jsp";
String nextTask = request.getParameter("nextTask");
//(... I have omitted code to conditionally select targetJsp value, according to nextTask value ...)
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(targetJsp);
rd.include(request, response);
Это просто новый JSP внутри моего портлета, а не другая страница портала.Я использую request.getParameter()
, чтобы получить значения для полей формы из моего doview()
:
String subjectFeedback = request.getParameter("asunto");
String bodyFeedback = request.getParameter("mensaje");
String emailFeedback = request.getParameter("emailFeedback");
Я не вижу необходимости включать скрытые поля, если в моей форме есть поля, названные выше.На самом деле, я пытаюсь передать значения, введенные пользователем в эти поля, в качестве параметров запроса, но значения, которые я получаю таким образом, следующие:
subjectFeedback: "'+valorAsunto+'"
bodyFeedback: "'+valorMensaje+'"
emailFeedback: "'+valorEmailFeedback+'"
Я получаю вышезначения при использовании конкатенации по «+»;когда я использую StringBuffer
, я получаю следующие значения:
subjectFeedback: "'); buffer.append(valorAsunto); buffer.append('"
bodyFeedback: "'); buffer.append(valorMensaje); buffer.append('"
emailFeedback: "'); buffer.append(valorEmailFeedback); buffer.append('"