我是 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 个输入参数:Temperature、FromUnit 和 ToUnit,然后将它们传递给公共 WebService,该 WebService 将温度例如从华氏温度转换为摄氏度(参见http://www.webservicex.net/ConvertTemperature.asmx?WSDL ) .
portlet 正确呈现输入字段,当我单击提交按钮时,它还尝试执行 Web 服务,但它实际上并没有传递参数,因为我从 Web 服务本身收到以下错误响应:
System.InvalidOperationException:缺少参数:温度。在 System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection 集合) 在 System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest request) 在 System.Web.Services.Protocols.HttpServerProtocol.ReadParameters() 在 System.Web .Services.Protocols.WebServiceHandler.CoreProcessRequest()
因此,即使我的 portlet 有输入字段 Temperature 它似乎并没有真正传递它并将其附加到帖子中的操作 URL ...
另外,我将“post”替换为“get”,URL 字符串如下所示:
我在这里做错了什么?显然它似乎传递了错误的参数......