在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>