Передайте значения полей формы в параметры портлета: тег renderURL в WebSphere Portal 6.1 - PullRequest
1 голос
/ 02 декабря 2011

Я разрабатываю портлет для 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 все "< "для" &lt; "и все" > "для" &gt; "до конкатенации, а затем выполнить следующее:

var valorAction = valorAction.replace(/&lt;/g,"<").replace(/&gt;/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('"

Ответы [ 3 ]

0 голосов
/ 04 декабря 2011

Как вы перенаправляете на другую страницу? Это другая страница портала или просто новая страница JSP внутри вашего портлета? Вам не нужно вводить какие-либо параметры в URL рендера. Есть форма, действие которой предназначено для renderURL. Теперь, чтобы передать информацию методу doView() вашего портлета, вы можете иметь скрытые поля в форме, затем заполнить их с помощью JavaScript и затем отправить форму. В методе doView() вы можете использовать request.getParameter() для получения параметров.

0 голосов
/ 08 декабря 2011

Ну, иногда самые очевидные вещи - это путь к решениям.

Я был слишком занят, пытаясь найти сложные причины для той ситуации, которую я вообще не проверял:

Мои поля формы были правильно идентифицированы различными id , но им не были установлены их свойства name .

С помощью рабочего партнера мы могли бы выяснить, что присвоение одинакового значения id для name в каждом поле формы дало свои результаты.

Итак, я пропустил эту переназначающую вещь действия, потому что значения полей устанавливаются как параметры запроса, как и должно быть.

Спасибо за помощь.

0 голосов
/ 02 декабря 2011

Кто-нибудь знает какой-либо другой способ "вставить" значения этого параметра в renderURL?

На эту тему есть два руководства IBM.

Портал 6.1 и 7.0 Расширенные классы помощника по генерации URL

Как создать ссылку на портлет (стандартный API), который передает параметры этому портлету

...