Fórum

ポートレットに表示された値にハイパーリンクを付けた値渡し

Takashi Yoshida, modificado 6 Anos atrás.

ポートレットに表示された値にハイパーリンクを付けた値渡し

New Member Mensagem: 1 Data de Entrada: 20/06/17 Postagens Recentes
お世話になります。

表示された値にハイパーリンクを付け、クリックした際にその値をパラメータとして持たして、
値に紐づいたデータを再度同じポートレットに表示させるといった実装をしたく検討しております。

service builderを用いてローカル上のMySQL内のテーブルから値を取得して、
ポートレット上に表示させる実装までは出来ております。

現在、下記のような実装になっておりますが、
表示された値をクリックしたところaccount_idがnullになっております。

何か改善すべき箇所等ございましたらご教示していただけますでしょうか。

よろしくお願い致します。
public class Demo extends MVCPortlet {
	@Override
	public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
			throws IOException, PortletException {

		java.util.List<demo_accounts> list = null;
		list = demo_accountsLocalServiceUtil.getdemo_accountses(0, demo_accountsLocalServiceUtil.getdemo_accountsesCount());
		renderRequest.setAttribute("list", list);
		for (demo_accounts record : list) {
			System.out.println(record.getAccount_id()+"|"+record.getName());
		}

		java.util.List<demo_account_systems> list_system = null;
		list_system = demo_account_systemsLocalServiceUtil.getdemo_account_systemses(0, demo_account_systemsLocalServiceUtil.getdemo_account_systemsesCount());
		
		renderRequest.setAttribute("list_system", list_system);

		super.doView(renderRequest, renderResponse);
	}

@ProcessAction(name="someProcessAction")
	public void someProcessAction(ActionRequest actionRequest, ActionResponse actionResponse)
		throws IOException, PortletException, JSONException {
		
	    String account_id = ParamUtil.getString(actionRequest, "account_id");
	    actionResponse.setRenderParameter("mvcPath","/show.jsp");
	    System.out.println("#######Value##############"+account_id);
	    System.out.println("#######Calling some process action##############");
	    ParamUtil.print(actionRequest);
		System.out.println(account_id);
		
		java.util.List<demo_account_systems> list_system = null;
		int find = Integer.valueOf(account_id);
		try {
			DynamicQuery dynamicQuery=DynamicQueryFactoryUtil.forClass(demo_account_systems.class)
		            .add(RestrictionsFactoryUtil.eq("account_id", find));
			list_system = demo_account_systemsLocalServiceUtil.dynamicQuery(dynamicQuery);
		} catch (Exception e) {
			System.out.println(e);
		}
		System.out.println(list_system);
		System.out.println("System.out.println(list_system)");
		actionRequest.setAttribute("list_system", list_system);
	}</demo_account_systems></demo_account_systems></demo_accounts>

&lt;%
java.util.List<demo_accounts> list = (java.util.List<demo_accounts>)renderRequest.getAttribute("list");
java.util.List<demo_account_systems> list_system = (java.util.List<demo_account_systems>)renderRequest.getAttribute("list_system");
%&gt;

<portlet:defineobjects />
&lt;% for (demo_accounts record : list) { %&gt;
&lt;%
    PortletURL actionURL = renderResponse.createActionURL();
    actionURL.setParameter("javax.portlet.action", "someProcessAction");
%&gt;
&lt;%= record.getAccount_id() %&gt; | 
<a href="<%=actionURL%>">&lt;%= record.getName() %&gt;</a>
&lt;% } %&gt;</demo_account_systems></demo_account_systems></demo_accounts></demo_accounts>
thumbnail
Yasuyuki Takeo, modificado 6 Anos atrás.

RE: ポートレットに表示された値にハイパーリンクを付けた値渡し

Junior Member Postagens: 30 Data de Entrada: 13/09/12 Postagens Recentes
以下のタグで、deleteURL内にリンク文字列を生成できます。アナウンスメントポートレットを参照にした例です。
        <portlet:actionurl name="/announcements/edit_entry" var="deleteURL">
            <portlet:param name="<%= Constants.CMD %>" value="<%= Constants.DELETE %>" />
            <portlet:param name="redirect" value="<%= announcementsRequestHelper.getCurrentURL() %>" />
            <portlet:param name="entryId" value="<%= String.valueOf(entry.getEntryId()) %>" />
        </portlet:actionurl>


/announcements/edit_entryで指定されるコール先のActionの設定方法は
https://dev.liferay.com/develop/tutorials/-/knowledge_base/7-0/mvc-action-command
を参照ください。MVCPortlet、もしくはMVCActionCommandに紐付けすることができます。

また、Liferayではデータベースにデータを取得しに行く場合は、DynamicQueryFactoryUtilなどを利用して自分でクエリそのものを作成して投げることはほとんどなく、*LocalService*を利用します。
レコードの検索に関しても、Finderという仕組みがあり、service.xmlに定義を記載することで、自動生成させることができます。
この記事が参考になるかと思います。
http://www.liferaysavvy.com/2014/06/liferay-service-builder-finder-methods.html

Finderでもカバーできない仕様がある場合は、Dynamic Query, Custom SQLを利用してのサービス利用になるかと思います。

サービスビルダーポートレットで検索・ワークフローなどを動作させられるテンプレートを作成してくれるツール、Damascusというのもあるので、よかったら試してみてください。
http://qiita.com/yasuflatland-lf/items/3421dbceaf01d1f6b37b