当前位置: 首页 > 知识库问答 >
问题:

参数没有从Portlet(Liferay)正确传递到公共WebService(convertpert温)

贝成业
2023-03-14

我是Portlet开发的新手,我遇到了Liferay的一个烦人的问题。

我在“my-greeting”教程中的“edit.jsp”基础上创建了以下portlet(.jsp)页面:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>

<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui" %>

<%@ page import="javax.portlet.PortletPreferences" %>

<portlet:defineObjects />

<%

PortletPreferences prefs = renderRequest.getPreferences();
String Temperature = (String)prefs.getValue("Temperature","Temperature");

PortletPreferences prefs2 = renderRequest.getPreferences();
String FromUnit = (String)prefs2.getValue("FromUnit", "FromUnit");

PortletPreferences prefs3 = renderRequest.getPreferences();
String ToUnit = (String)prefs3.getValue("ToUnit","ToUnit");



%>



<portlet:renderURL var="editGreetingURL">

    <portlet:param name="jspPage" value="/edit.jsp" />

</portlet:renderURL>

<aui:form action="http://www.webservicex.net/ConvertTemperature.asmx/ConvertTemp" method="post">

    <aui:input label="Temperature" name="Temperature" type="text" value="<%= Temperature %>" />
    <aui:input label="FromUnit" name="FromUnit" type="text" value="<%= FromUnit %>" />
    <aui:input label="ToUnit" name="ToUnit" type="text" value="<%= ToUnit %>" />
    <aui:button label="submit" type="submit" value="Submit" />

</aui:form>

<portlet:renderURL var="viewGreetingURL">

    <portlet:param name="jspPage" value="/view.jsp" />

</portlet:renderURL>

<p><a href="<%= viewGreetingURL %>">Back</a></p>

</body>
</html>

这个portlet应该接受3个输入参数:therment、FromUnit和ToUnit,然后将它们传递给公共WebService,该公共WebService将温度从华氏转换为Celcius(请参见http://www.webservicex.net/convertverten.asmx?wsdl)。

portlet正确地呈现输入字段,当我单击submit按钮时,它也尝试执行Webservice,但实际上它并没有传递参数,因为我从Webservice本身得到以下错误响应:

因此,即使我的portlet有输入字段温度,它似乎实际上并没有传递它并将其附加到post中的操作URL...

另外,我用一个“get”替换了“post”,URL字符串如下所示:

http://www.webservicex.net/converttemper.asmx/converttemp?_mygreeting_war_mygreetingportlet_formdate=1377389917227&_mygreeting_war_mygreetingportlet_temperature=30&_mygreeting_war_mygreetingportlet_fromunit=degreefahrenheit&_mygreeting_war_mygreetingportlet_tounit=degreecelsius

我在这里做错了什么?很明显,它似乎传递了错误的参数...

共有1个答案

秦昂然
2023-03-14
  • portlet的JSP不能有部分,这是门户的业务。您只在portlet中生成整个页面的片段
  • 当您使用 时,AlloyUI知道它是在门户中运行的,因此它将portlet命名空间添加到参数名称中-这就是您在引用的GET URL中看到的。(如果确实想从门户向外部站点发布内容,只需使用
    )
  • 如果您检查http://www.webservicex.net/converttemp.asmx/converttemp?&temperature=30&fromunit=degreefahrenheit&tounit=degreeCelsius,您将看到它会回复一个类似于WebService的结果,例如 -1.1111111111110859 ,因此您很可能不希望将此作为表单的post目标,而是实现portlet来访问服务并显示嵌入在portlet输出中的结果。如何做到这一点超出了本答案的范围
  • 只是相关的:您可以从prefs对象中获得所有首选项,不需要prefs2prefs3,而且您没有使用editgreetingurl,对吗?
 类似资料:
  • 我在Liferay门户上有一个portlet,我在其中从调用操作。jsp页面。我想把一个字符串数组传递给另一个。显示此数组的jsp页面。但是,根本没有传递任何值。 我能够使用String something=(String)pref传递一些

  • 我50%的希望渺茫:P.我(一开始)试图从一个线程的代码中更新GUI,但得到了NullException。在阅读了一段时间后,我了解到线程淹没了JavaFX应用程序窗口,为了从线程更新GUI,我需要使用以下代码: 所以我确实使用了这个代码,它确实允许我编辑我的主类的图形用户界面。不过,我的问题很简单。= 如何将父级的public void run()中的参数传递给这个?。例如,字符串tmpStri

  • 我正在开发一个Liveay portlet。我想做的是打开一个新的jsp,并向它发送一个来自javascript变量的URL参数。我考虑了一下,发现了两个想法: 1) 使用ajax将js变量发送到jsp,然后在jsp中使用从js接收到的参数值创建一个呈现url。但是我如何将js变量发送到jsp,我在互联网上找不到一个好的例子。 2) 使用收到的参数在javascript中构建呈现url,然后使用我

  • 问题内容: 我正在尝试学习go,并且一开始我想尝试组装一个超级简单的Web服务器来控制iTunes。过去,我已经多次达到这个目的,并认为我可以在这里简单地取消对osascript的调用。 注释掉的“ say 5”命令 确实 起作用。 我收到的回应如下: 我不确定从这里要去哪里,任何方向都将不胜感激。 问题答案: 我明白了 我认为exec.Command(…)如果参数中有空格,则在参数中添加双引号,

  • 我有许多Portlet在热部署后可以正常工作,但在重新启动Liferay(自动部署)后无法工作。我能让它们重新工作的唯一方法是重建并进行另一次热部署。 我有3个不同的spring mvc portlet(org.springframework.web.portlet.DispatcherPortlet)。其中最简单的3个在重启时没有问题,而其他2个则不工作。所有三个都是从使用Eclipse Lif

  • 我使用Liferay portlet bundle 6.2(Tomcat)和Liferay IDE(eclipse)。我创建了两个Liferay插件项目。在第一个portlet(第一个插件portlet)中,我使用portlet首选项保存了一些数据。现在,我将在第一个portlet中显示第二个portlet。我怎么能做到?我找到了下面的代码和这个链接 从其他portlet打开portlet 但是,