六月 05

在Liferay 6.2之後的版本中,如果要在portlet中使用http post的話,

有些事情需要注意。下面先簡單的建立程式碼。

於portlet class中撰寫以下程式


@ProcessAction(name="addName")
public void addName(ActionRequest actionRequest, ActionResponse actionResponse)
throws IOException, PortletException {
String userName = ParamUtil.get(actionRequest, "userName", StringPool.BLANK);
actionRequest.setAttribute("userName", userName);
}

於該portlet對映的view.jsp中撰寫以下程式,重點在於<portlet:namespace />,

如果沒加上去的話,Liferay 6.2 會無法取得userName的資料。


User Name is : <b> ${userName}</b>
<portlet:defineObjects />
<portlet:actionURL name="addName" var="addNameUrl"></portlet:actionURL>
<br />
<form action="${addNameUrl}" method="post">
<input name="<portlet:namespace />userName" type="text" /><br />
<input type="submit" />
</form>

不過這樣子寫感覺上怪怪的,沒辦法很直覺。

如果你不想加上<portlet:namespace />的話,那麼你可以使用下面的方法。

於   /你的Portlet名稱/docroot/WEB-INF/liferay-portlet.xml  這個檔案中,

找到你的portlet區段,然後加上下面的設定。


<requires-namespaced-parameters>false</requires-namespaced-parameters>

請特別注意,要加上這個設定有特定的順序,請放在<icon>icon.png</icon>的下方,不可以亂放。

加上去後會像下方的範例


<portlet>
<portlet-name>new-portlet-test</portlet-name>
<icon>/icon.png</icon>
<requires-namespaced-parameters>false</requires-namespaced-parameters>
<header-portlet-css>/css/main.css</header-portlet-css>
<footer-portlet-javascript>/js/main.js</footer-portlet-javascript>
<css-class-wrapper>new-portlet-test-portlet</css-class-wrapper>
</portlet>