0

私はポートレット開発に不慣れで、Liferay で厄介な問題に直面しています。

少し遊んで、「My-Greeting」チュートリアルの「edit.jsp」に基づいて、次のポートレット (.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>

このポートレットは、Temperature、FromUnit、および ToUnit の 3 つの入力パラメーターを受け取り、それらをパブリック WebService に渡します。この WebService は、Temperature をたとえば華氏から摂氏に変換します ( http://www.webservicex.net/ConvertTemperature.asmx?WSDLを参照)。 )。

ポートレットは入力フィールドを正しくレンダリングし、送信ボタンをクリックすると Web サービスも実行しようとしますが、実際にはパラメーターを渡さないようです。これは、Web サービス自体から次のエラー応答が返されるためです。

System.InvalidOperationException: パラメーターがありません: 温度。System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection コレクション) で System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest 要求) で System.Web.Services.Protocols.HttpServerProtocol.ReadParameters() で System.Web .Services.Protocols.WebServiceHandler.CoreProcessRequest()

したがって、私のポートレットには入力フィールド温度がありますが、実際にはそれを渡して投稿のアクション URL に添付していないようです...

さらに、「post」を「get」に置き換えたところ、URL 文字列は次のようになりました。

http://www.webservicex.net/ConvertTemperature.asmx/ConvertTemp?_mygreeting_WAR_mygreetingportlet_formDate=1377389917227&_mygreeting_WAR_mygreetingportlet_Temperature=30&_mygreeting_WAR_mygreetingportlet_FromUnit=華氏度&_mygreeting_WAR_mygreetingportlet_ToUnit=摂氏度

ここで何が間違っていますか?明らかに間違ったパラメータを渡しているようです...

4

1 に答える 1

0
  • ポートレットの jspsには、ポータルの業務である and セクション<html><head>あってはなりません。<body>ポートレットでページ全体のフラグメントのみを生成します
  • と を使用する<aui:form><aui:input>、AlloyUI はポータルで実行されていることを認識するため、ポートレットの名前空間をパラメータ名に追加します。これは、引用している GET URL に表示されるものです。(ポータルから外部サイトに投稿したい場合は、単純に<form>and を使用します)<input>
  • http://www.webservicex.net/ConvertTemperature.asmx/ConvertTemp?&Temperature=30&FromUnit=degreeFahrenheit&ToUnit=degreeCelsiusを確認すると、これが Web サービスのような結果で応答することがわかります<double>-1.1111111111110859</double>。これをフォームの投稿ターゲットにする代わりに、ポートレットを実装してサービスに到達し、ポートレットの出力に埋め込まれた結果を表示します。これを行う方法は、この回答の範囲を超えています
  • ちょうど関連:prefsオブジェクトからすべての設定を取得できます。 and は必要ありprefs2ませprefs3ん。また、 を使用していませんeditGreetingURL
于 2013-08-25T09:46:52.640 に答える