Letzte Blogger

Eduardo P. Garcia

Staff
5 Nachrichten
29. September 2014

Neil Griffin

Staff
43 Nachrichten
26. September 2014

Angela Wu

Staff
4 Nachrichten
25. September 2014

Ken Dong

Staff
5 Nachrichten
25. September 2014

Martin Yan

Staff
7 Nachrichten
24. September 2014

Muhammed Shafeek V

2 Nachrichten
23. September 2014

James Falkner

Staff
96 Nachrichten
22. September 2014

Nate Cavanaugh

Staff
37 Nachrichten
17. September 2014

Vicki Lea Tsang

Staff
5 Nachrichten
11. September 2014

Máté Thurzó

Staff
3 Nachrichten
8. September 2014
« Zurück

Overriding and adding struts actions from hook plugins

Company Blogs 17. Januar 2011 Von Mika Koivisto Staff

This is a new cool feature I worked on with Brian and it’s coming on 6.1 as well as 6.0 EE SP2 and 5.2 EE SP6. With this feature you can add new struts actions to portal from a hook plugin and you can override any existing action with it.

There are two interfaces com.liferay.portal.kernel.struts.StrutsAction and com.liferay.portal.kernel.struts.StrutsPortletAction. The StrutsAction is used for regular struts actions like /c/portal/update_password and StrutsPortletAction is used for those that are used from portlets.

Let’s create a new simple hook to test it out. This hook will create a new struts path /c/portal/sample and wraps an existing struts action. Start by creating a new hook plugin in your plugins SDK. I’ll call it sample-struts-action.

./create.sh sample-struts-action

Next edit the liferay-hook.xml and add following fragment:

<?xml version="1.0"?>
<!DOCTYPE hook PUBLIC "-//Liferay//DTD Hook 6.1.0//EN" "http://www.liferay.com/dtd/liferay-hook_6_1_0.dtd">

<hook>
	<portal-properties>portal.properties</portal-properties>
	<custom-jsp-dir>/META-INF/custom_jsps</custom-jsp-dir>
	<struts-action>
		<struts-action-path>/portal/sample</struts-action-path>
		<struts-action-impl>com.liferay.samplestrutsaction.hook.action.SampleStrutsAction</struts-action-impl>
	</struts-action>
	<struts-action>
		<struts-action-path>/message_boards/view</struts-action-path>
		<struts-action-impl>com.liferay.samplestrutsaction.hook.action.SampleStrutsPortletAction</struts-action-impl>
	</struts-action>
</hook>

Next we need to create the struts action like below:

package com.liferay.samplestrutsaction.hook.action;

import com.liferay.portal.kernel.struts.BaseStrutsAction;
import com.liferay.portal.kernel.util.ParamUtil;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author Mika Koivisto
 */
public class SampleStrutsAction extends BaseStrutsAction {

	public String execute(
		HttpServletRequest request, HttpServletResponse response)
		throws Exception {

		String name = ParamUtil.get(request, "name", "World");

		request.setAttribute("name", name);

		return "/portal/sample.jsp";
	}

}

Next create the second Struts action. This one will actually wrap ViewAction of message boards portlet.

package com.liferay.samplestrutsaction.hook.action;

import com.liferay.portal.kernel.struts.BaseStrutsPortletAction;
import com.liferay.portal.kernel.struts.StrutsPortletAction;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletConfig;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;

/**
 * @author Mika Koivisto
 */
public class SampleStrutsPortletAction extends BaseStrutsPortletAction {

	public void processAction(
			StrutsPortletAction originalStrutsPortletAction,
			PortletConfig portletConfig, ActionRequest actionRequest,
			ActionResponse actionResponse)
		throws Exception {

		originalStrutsPortletAction.processAction(
			originalStrutsPortletAction, portletConfig, actionRequest,
			actionResponse);
	}

	public String render(
			StrutsPortletAction originalStrutsPortletAction,
			PortletConfig portletConfig, RenderRequest renderRequest,
			RenderResponse renderResponse)
		throws Exception {

		System.out.println("Wrapped /message_boards/view action");

		return originalStrutsPortletAction.render(
			null, portletConfig, renderRequest, renderResponse);
	}

	public void serveResource(
			StrutsPortletAction originalStrutsPortletAction,
			PortletConfig portletConfig, ResourceRequest resourceRequest,
			ResourceResponse resourceResponse)
		throws Exception {

		originalStrutsPortletAction.serveResource(
			originalStrutsPortletAction, portletConfig, resourceRequest,
			resourceResponse);
	}

}

Then we need to create the JSP in docroot/META-INF/custom_jsps/html/portal/sample.jsp

Hello !

And lastly we need to create portal.properties in docroot/WEB-INF/src

auth.public.paths=/portal/sample

Now we are ready to deploy the plugin and see if it works. Just run ant deploy in your plugins sdk to deploy it.

You should see following in your tomcat console:

22:01:29,635 INFO  [AutoDeployDir:167] Processing sample-struts-action-hook-6.1.0.1.war
22:01:29,638 INFO  [HookAutoDeployListener:43] Copying web plugin for /Users/mika/Development/Liferay/git/bundles/deploy/sample-struts-action-hook-6.1.0.1.war
  Expanding: /Users/mika/Development/Liferay/git/bundles/deploy/sample-struts-action-hook-6.1.0.1.war into /Users/mika/Development/Liferay/git/bundles/tomcat-6.0.29/temp/20110117220130299
  Copying 1 file to /Users/mika/Development/Liferay/git/bundles/tomcat-6.0.29/temp/20110117220130299/WEB-INF/classes
  Copying 1 file to /Users/mika/Development/Liferay/git/bundles/tomcat-6.0.29/temp/20110117220130299/WEB-INF/classes
  Copying 1 file to /Users/mika/Development/Liferay/git/bundles/tomcat-6.0.29/temp/20110117220130299/WEB-INF
  Copying 1 file to /Users/mika/Development/Liferay/git/bundles/tomcat-6.0.29/temp/20110117220130299/META-INF
  Copying 12 files to /Users/mika/Development/Liferay/git/bundles/tomcat-6.0.29/webapps/sample-struts-action-hook
  Copying 1 file to /Users/mika/Development/Liferay/git/bundles/tomcat-6.0.29/webapps/sample-struts-action-hook
  Deleting directory /Users/mika/Development/Liferay/git/bundles/tomcat-6.0.29/temp/20110117220130299
22:01:30,486 INFO  [HookAutoDeployListener:49] Hook for /Users/mika/Development/Liferay/git/bundles/deploy/sample-struts-action-hook-6.1.0.1.war copied successfully. Deployment will start in a few seconds.
Jan 17, 2011 10:01:39 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory sample-struts-action-hook
22:01:39,727 INFO  [PluginPackageUtil:1080] Reading plugin package for sample-struts-action-hook
22:01:39,759 INFO  [HookHotDeployListener:432] Registering hook for sample-struts-action-hook
22:01:39,770 INFO  [HookHotDeployListener:717] Hook for sample-struts-action-hook is available for use

Now try to access http://localhost:8080/c/portal/sample. It will ask you to sign in and once you sign in you should see the message Hello World! in your browser. You can add a paramer name to the url to change the message. If you access message boards it will print the message "Wrapped /message_boards/view action" in tomcat console and continue to render message boards as if nothing was changed.

Now our sample was really simple one. The return value from the execute method is the view where the request is dispatched next. This can be path to JSP, an existing struts forward or tiles definition. Returning null means that your action has handled the view already. Now you could try to return for instance portal.terms_of_use to display the terms of use.

You can download this sample plugin from svn://svn.liferay.com/repos/public/plugins/trunk/hooks/sample-struts-action-hook. The username is guest and password is empty.

UPDATE: We changed the API so that the original action is passed in so that you can also wrap it with your own logic instead of replacing. I also added a new hook property auth.public.paths so it allows you to set new public paths from hooks. I also added a StrutsPortletAction into to the sample and that demonstrates wrapping an existing action.

Antworten im Thread Autor Datum
cooooooooooooooooooool feature! Thanks a lot,... Jonas Yuan 17. Januar 2011 14:48
Awesome Mika! I'm glad you guys worked on this. Ray Augé 17. Januar 2011 14:56
Really Nice Features.... Good Work Mika & Team Pravin Pawar 17. Januar 2011 21:13
Excellent! James Min 17. Januar 2011 21:38
Hienoa Mika, this is useful feature. Sampsa Sohlman 17. Januar 2011 21:41
Nice Feature! Jay Patel 17. Januar 2011 21:54
Sweet! Nice work Amos Fong 17. Januar 2011 22:39
outstanding, give more power to the hooks. thx... Armin Cyrus Dahncke 18. Januar 2011 01:04
Awesome!! Ruth Coca 18. Januar 2011 04:52
Great feature!! Peter Mesotten 18. Januar 2011 06:19
This is a fantastic feature, most awaited to... Ahmed Hasan 18. Januar 2011 10:26
We just made it even more powerful by passing... Mika Koivisto 18. Januar 2011 14:30
Cool feature! Can't wait to get my hands on it.. Rushikesh S Thakkar 21. Januar 2011 15:15
Great Feature. Very useful one.. Yogesh Agrawal 5. Februar 2011 05:19
Awesome - exactly what I went looking for....... James Korotney 16. März 2011 14:14
Awesome feature. Is it possible to create... Sandeep Nair 27. März 2011 22:41
Yes you can use custom services in the hook... Mika Koivisto 28. März 2011 12:58
[...] Luis Rodríguez Fernández: Hi Sam, I am... Anonym 14. Mai 2011 23:51
[...] Adding a hook to Liferay 05/06/2011 by... Anonym 5. Juni 2011 14:39
About one year ago, I worked in a little... Aig Loss 24. Juni 2011 08:57
With Liferay 6.06 I am not finding... Mike Oliver 11. Juli 2011 19:39
Nice! Do you know if is possible to override an... Roberto Barchino 13. Juli 2011 02:51
Mike and Roberto this is only available in... Mika Koivisto 13. Juli 2011 11:32
Hi Roberto, I've posted the jar, and a sample... Aig Loss 13. Juli 2011 13:32
Hi Aig, is there something like zeep-o-tron for... alex wom 18. Juli 2011 00:56
I have'nt tested it yet for that Liferay... Aig Loss 18. Juli 2011 04:10
Hi Alex, finally I've found some time to test... Aig Loss 23. Juli 2011 11:27
[...] Liferay just released their second... Anonym 2. August 2011 02:13
[...] If you are overriding just the jsp, you... Anonym 9. September 2011 04:46
[...] Hello, all! We want to associate journal... Anonym 9. September 2011 13:11
Realy cool. Canching the Portal will be so much... Jan Bub 10. September 2011 02:51
I am trying to create a hook plugin by... Rajesh Chaurasia 18. September 2011 07:30
Was a very nice feature and i tried and... Kamesh Sampath 22. Oktober 2011 08:35
[...] Following this blog, i was able use the... Anonym 22. Oktober 2011 08:45
Rajesh Chaurasia, are you sure you have the... Mika Koivisto 24. Oktober 2011 10:37
Kamesh Sampath, can you provide me a example of... Mika Koivisto 24. Oktober 2011 10:39
Isn't this supported by simply delegating those... Ray Augé 24. Oktober 2011 10:47
Ray that would only work if you are overriding... Mika Koivisto 24. Oktober 2011 10:53
[...] I totally agree with you Jeff. One thing... Anonym 22. November 2011 12:24
I ve a similar problem of Rajesh Chaurasia i... Paolo Pilitti 25. November 2011 06:33
[...] portal-properties (called portal... Anonym 30. November 2011 11:24
[...] What do you want to happen when the user... Anonym 1. Dezember 2011 16:04
Great, informative article! Really useful... Kris Sokolovski 2. Dezember 2011 03:49
Great feature so far! ... but... I am trying... Jana Volkmer 13. Dezember 2011 00:09
I'm able to wrap the message_boards/view action... Rex Petersen 31. Dezember 2011 12:45
This is a nice feature indeeed, but there seems... Jon Haikarainen 5. Januar 2012 06:39
I have also hit the same exact problem as Rex... Trevor Ackerman 6. Januar 2012 13:31
Hey can you open a ticket for this and post the... Mika Koivisto 6. Januar 2012 13:56
I'm assuming you are responding to Jon... Trevor Ackerman 9. Januar 2012 13:53
Finally I got the ticket for the... Jon Haikarainen 10. Januar 2012 03:35
Is this supported in 6.0.6 CE R V 18. Januar 2012 12:37
R V this is implemented in 6.1.0 CE and... Mika Koivisto 18. Januar 2012 12:46
When I override an existing JSP e.g. lets say... Kamesh Sampath 7. Februar 2012 16:01
[...] Now here’s the relatively new way to... Anonym 10. Februar 2012 08:18
[...] Buenos días. A ver si alguien me pude... Anonym 13. Februar 2012 01:47
Is it posible to extend Action that are defined... Mark Stein 21. Februar 2012 07:34
Mark, unfortunately no. You can only extend... Mika Koivisto 21. Februar 2012 11:14
cool feature : ) Scott Lee 27. Februar 2012 15:07
Hi all this is cool feature and i am trying to... Muradali Hasan 28. März 2012 03:03
Hi, I got class cast exception when I access... Zhidao Xu 18. April 2012 19:52
i want to create a hook for blog portlet and... iqbal ahmed 19. April 2012 04:35
Hello Mika Koivisto and other Liferay experts, ... Elijah "Ellie" Mangason 16. Mai 2012 08:40
[...] I have recently been working on a task to... Anonym 17. Mai 2012 15:46
Hello! I read your article several times, and... Elijah "Ellie" Mangason 21. Mai 2012 08:42
[...] Hi, even if your statement is true, I got... Anonym 18. Juni 2012 09:41
[...] Hello, Version : Liferay EE 6.0 SP2... Anonym 11. Juli 2012 02:03
Hi Yana, i would like to answer (maybe too... Sven Kwiotek 22. August 2012 06:14
It is a bit challenging to add a new action... Muhammed Shakir 7. Oktober 2012 03:09
Hi Does tiles-defs-ext.xml file can be put... Tomasz Sokół 4. Februar 2013 06:18
Tiles definitions through the hook is not... Mika Koivisto 4. Februar 2013 09:16
Hi Mohamed, when I followed the link you gave,... Nabil Bahtat 13. Juli 2014 06:44
Hi Muhammed, I am trying to implement a... Mashuk Choudhury 18. Juli 2014 01:13
Awesome feature, using it 1st time Liferay... Nasir Hussain 3. Dezember 2012 03:50
nice feature it is. However I'm running into... stephan t 13. Dezember 2012 02:11
Trying to do the same thing (except just on add... Gary Pinkham 4. April 2013 08:17
[...] shivam aggarwal: Hi Apoorva, I was trying... Anonym 13. Dezember 2012 09:18
[...] Hi Dave, Please refer this link. Hope... Anonym 17. März 2013 23:59
Hi, I am extending "CreateAccountAction" class... Laxman Rana 25. April 2013 06:58
Laxman, I am doing something similar, but you... Steven Linzer 12. Juni 2013 07:25
FYI, you don't even need to have as struts... Ray Augé 12. Juni 2013 07:35
Ray, On your comment: "you don't even need to... Steven Linzer 13. Juni 2013 10:41
Hi How to add struts action in LR 6.0.5 Thanks mohammad azaruddin 3. Mai 2013 03:54
Same as Zhidao Xu here! I'm getting a... Juanjo Hernández Cánovas 3. Oktober 2013 07:49
Hi Mika, I tried to override /polls/view by... Nabil Bahtat 11. Februar 2014 13:58
Nabil, we don't currently support overriding... Mika Koivisto 11. Februar 2014 14:16
Thanks Mika, is there any workaround ? Thanks,... Nabil Bahtat 11. Februar 2014 21:44
I'm trying to override OpenIdAction using... pspyra pspyra 12. März 2014 07:13
*correct link is... pspyra pspyra 24. April 2014 03:08

cooooooooooooooooooool feature! Thanks a lot, Mika and Brian.
Gepostet am 17.01.11 14:48.
Awesome Mika! I'm glad you guys worked on this.
Gepostet am 17.01.11 14:56.
Really Nice Features....
Good Work Mika & Team
Gepostet am 17.01.11 21:13 als Antwort auf Ray Augé.
Hienoa Mika, this is useful feature.
Gepostet am 17.01.11 21:41.
Gepostet am 17.01.11 22:39.
outstanding,

give more power to the hooks. thx mika
Gepostet am 18.01.11 01:04.
This is a fantastic feature, most awaited to get realized thru a hook plugin. Nice Job Mika and Brian. Thank you so much.
Gepostet am 18.01.11 10:26.
We just made it even more powerful by passing in reference to the original action so that you can just wrap it if you so wish.
Gepostet am 18.01.11 14:30.
Cool feature! Can't wait to get my hands on it..
Gepostet am 21.01.11 15:15.
Gepostet am 05.02.11 05:19.
Awesome - exactly what I went looking for.... when can I have it :-)
Gepostet am 16.03.11 14:14.
Awesome feature. Is it possible to create custom services in hook and then call the new services from these overrided struts action? And any hint on when liferay 6.0 EE SP2 will be released so that i can use these in my project?
Gepostet am 27.03.11 22:41 als Antwort auf James Korotney.
Yes you can use custom services in the hook plugin from the action classes.
Gepostet am 28.03.11 12:58 als Antwort auf Sandeep Nair.
[...] Luis Rodríguez Fernández: Hi Sam, I am extending the /announcements/edit_entry action implementing a hook. I have created a hook project and in the src folder I have my implementation of the... [...] Read More
Gepostet am 14.05.11 23:51.
[...] Adding a hook to Liferay 05/06/2011 by Steffen Luypaert Leave a Comment In this article, we elaborate on Liferay hooks, which are a type of plugin for the Java-based Liferay portal. We discuss what... [...] Read More
Gepostet am 05.06.11 14:39.
About one year ago, I worked in a little development that allowed me to override/add, struts actions, tiles configurations, spring beans, and add classs to Liferay usng hooks...
You con find some clues in a 3-posts series at http://aigloss.blogspot.com/2011/04/liferay-portal-server-avoiding-use-of.html.
I­'ve been using it in productin environments since there and has been tested in LF5.1.2 (it was originally developed for that LF version), ang earlier versions of Liferay 6 CE.
Gepostet am 24.06.11 08:57 als Antwort auf .
With Liferay 6.06 I am not finding com.liferay.portal.kernel.struts.BaseStrutsAction to import.
Gepostet am 11.07.11 19:39.
Nice!
Do you know if is possible to override an struts action in a hook without using ext--enviroment in liferay 5.2.3? Because in the DTD hook of liferay 5.2.3 there are the <struts-action> tags... but know I see that this will be a new functionality of liferay 6.1.
I'm little bit confusing.

Can anyone help me?

Thank you.
Gepostet am 13.07.11 02:51 als Antwort auf Mike Oliver.
Mike and Roberto this is only available in upcoming 6.1 and 6.0 EE SP2 and 5.2 EE SP6. Neither 6.0 CE or 5.2 CE has this feature as it was developed after their release.
Gepostet am 13.07.11 11:32 als Antwort auf Roberto Barchino.
Hi Roberto,
I've posted the jar, and a sample hook for Liferay 5.2.3 with the module I was talking in the other post. As told, using that you'll be able to override/add struts configs and actions, tiles configs, spring beans, plus any other thing Liferay allow you to do using hook.
You can check that sample out at http://aigloss.blogspot.com/2011/07/liferay-portal-server-avoiding-use-of.html
Ho­pe you like it!
Gepostet am 13.07.11 13:32 als Antwort auf Mika Koivisto.
Hi Aig, is there something like zeep-o-tron for Liferay 6.0.6?
Gepostet am 18.07.11 00:56 als Antwort auf Aig Loss.
I have'nt tested it yet for that Liferay version, but, unless there is some package modification or something like that, it will surely work.
I'll try to test it and upload a working sample for LF 6.0.6 during this week. Just uploaded it for 5.2.3 first because of Roberto needs.
Gepostet am 18.07.11 04:10 als Antwort auf alex wom.
Hi Alex,
finally I've found some time to test it on LF 6.0.6 and make some modifications. You can find the details here: http://aigloss.blogspot.com/2011/07/zeep-otron-for-liferay-6.html.

Hope you like it!
Gepostet am 23.07.11 11:27 als Antwort auf Aig Loss.
[...] Liferay just released their second service pack for 6.0 enterprise customers. Apart from lost of small bug fixes, they included one welcome enhancement to the hooks system: overriding struts actions... [...] Read More
Gepostet am 02.08.11 02:13.
[...] If you are overriding just the jsp, you could do that via hook. If you are overriding struts action ,you may have to use the ext-plugin until overriding them is available via plugins.... [...] Read More
Gepostet am 09.09.11 04:46.
[...] Hello, all! We want to associate journal articles to polls in such a way that we can automatically provide a link to an article when showing a poll. For that, we intend to follow the following steps:... [...] Read More
Gepostet am 09.09.11 13:11.
Realy cool. Canching the Portal will be so much easier.
Gepostet am 10.09.11 02:51.
I am trying to create a hook plugin by extending the class EditPagesAction .I have provided my version of action class with name NPPEditPagesAction.I am able to deploy my plugin into liferay .But I am not able to excute my implemention class code given in NPPEditPagesAction.I tried to set breakpoint in my code but I am not able to get the Debug perspecetive in eclipse.
hook.xml:
--------------
<hook>
<custom-jsp-dir>/WEB-INF</custom-jsp-dir>
­<struts-action>
<struts-action-path>/layout_management/edit_pages</struts-acti­on-path>
<struts-action-impl>com.liferay.portlet.communities.action.NPPEditPag­esAction</struts-action-impl>
</struts-action>
</hook>


Implementiaon :

public class NPPEditPagesAction extends EditPagesAction {

public void processAction(ActionMapping mapping, ActionForm form,
PortletConfig portletConfig, ActionRequest actionRequest,
ActionResponse actionResponse) throws Exception {

System.out.println("Inside processAction...createTheme()");
String cmd = ParamUtil.getString(actionRequest, Constants.CMD);

try {
if (cmd.equals("createtheme")) {
createTheme(actionRequest);
}

super­.processAction(mapping, form, portletConfig, actionRequest,actionResponse);

} catch (Exception e) {

}
}

public ActionForward render(ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
RenderRequest renderRequest, RenderResponse renderResponse)
throws Exception {

return super.render(mapping, form, portletConfig, renderRequest, renderResponse);
//return mapping.findForward(getForward(renderRequest, "portlet.communities.edit_pages"));

}

@SuppressWarnings("static-access")
publ­ic static void createTheme(ActionRequest actionRequest) {

System.out.println("Inside createTheme...");
ThemeUtil themeUtil = new ThemeUtil();
final String themeZipFilePath = ThemeUtil.SAMPLE_THEMES_PATH;
final String themeConfigFilePath = ThemeUtil.THEMES_CONFIG_PATH;
try{
//To Modify liferay-look-and-feel.xml
themeUtil.getXMLDetails(themeConfigFilePath);
­
//To Extract the sample themes zip folder to tomcat location
themeUtil.extractFolder(themeZipFilePath);

} catch (Exception ex) {
ex.printStackTrace();
}

}

///edit_pages_look_and_feel.jsp
<liferay-ui:­section>
<div style="width: 40%;">theme name:</div>
<input type="text" id="name">
<div style="width: 40%;">theme id:</div>
<input type="text" id="id"><br>
<div style="width: 40%;">body background:</div>
<input type="text" id="background" class="color"><br>
<div style="width: 40%;">bgcolor:</div>
<input type="text" id="bgcolor" class="color"><br>
<input type="button" value="<liferay-ui:message key="save" />" onclick="<portlet:namespace />createTheme();" />
</liferay-ui:section>


edit_pages.jsp
---------------

function <portlet:namespace />createTheme() {
alert("Hi:Inside createtheme....");
document.<portlet:namespace />fm.<portlet:namespace /><%= Constants.CMD %>.value = "createtheme";
submitForm(document.<portlet:namespace />fm);
}
Gepostet am 18.09.11 07:30.
Was a very nice feature and i tried and implemented it successfully. I have small requirement not sure that is doable or not, i need to redirect to an existing Struts Action in one of the conditions during the render of the BaseStrutsPortletAction case. e..g redirecting to path "login/login"
Gepostet am 22.10.11 08:35.
[...] Following this blog, i was able use the Struts Action hook to add new functionality to my existing hook . Now after doing my hook logic, i want to do a redirection or forward to an existing struts... [...] Read More
Gepostet am 22.10.11 08:45.
Rajesh Chaurasia, are you sure you have the right struts-path? Some of the paths are changed automatically by com.liferay.portal.struts.StrutsActionPortletURL so that the path matches the struts-path of the portlet. This can be quite confusing because the struts path in the jsp is different that what is actually rendered.
Gepostet am 24.10.11 10:37 als Antwort auf .
Kamesh Sampath, can you provide me a example of how would you do that with plain Struts? It might be possible if it's not then it might be something to consider adding.
Gepostet am 24.10.11 10:39 als Antwort auf Mika Koivisto.
Isn't this supported by simply delegating those cases back to:

"originalAction" which is the value of the execute's method ActionMapping parameter?
Gepostet am 24.10.11 10:47 als Antwort auf Mika Koivisto.
Ray that would only work if you are overriding that particular action. If you want to redirect from one action to another it would work. Well you could use response.sendRedirect().
Gepostet am 24.10.11 10:53 als Antwort auf Ray Augé.
[...] I totally agree with you Jeff. One thing i want to know i was looking into LR 6.1 CE B4 I had a look into MD Messages related code. Actually controller in this case was EditMessageAction extends... [...] Read More
Gepostet am 22.11.11 12:24.
I ve a similar problem of Rajesh Chaurasia

i want override ...action.GetCategoriesAction
so i write the liferay-hook.xml

<struts-action>
<struts-action-path>/asset/get_categories</str­uts-action-path>
<struts-action-impl>it.reply.open.wt.asset.action.GetCategori­esAction</struts-action-impl>
</struts-action>

but when in my code it invokes this action it uses :
url: themeDisplay.getPathMain() + '/asset/get_categories'

adding the pathMain ( that in my case is /c/ ) so it cant find the action class...
but if i dont add the pathMain it cant find url.



there is a solution for this?
Gepostet am 25.11.11 06:33 als Antwort auf .
[...] portal-properties (called portal properties hooks), language-properties (called language properties hooks), custom-jsp-dir (called custom JSPs hooks), custom-jsp-global (applying custom JSPs hooks... [...] Read More
Gepostet am 30.11.11 11:24.
[...] What do you want to happen when the user presses decline ? i think many scenarios could be solved with a simple jsp hook. If you really need to change the action then you need to override it in ext if... [...] Read More
Gepostet am 01.12.11 16:04.
Great, informative article! Really useful feature!

But I was stuck in one silly mistake in my liferay-hook.xml. The ORDER of elements really MATTERS!
It should be as described in "liferay-hook_6_0_0.dtd" (don't pay attention to version).

My liferay-hook.xml was:
<hook>
<custom-jsp-dir>/WEB-INF/custom_jsps</custom-jsp-dir>
<portal-propert­ies>portal.properties</portal-properties>
</hook>

This needed to be:
<hook>
<portal-properties>portal.properties</portal-properties>
<custom-jsp-d­ir>/WEB-INF/custom_jsps</custom-jsp-dir>
</hook>

I had problems to deploy it, and have gotten such ERROR:
ERROR [HotDeployUtil:114] com.liferay.portal.kernel.deploy.hot.HotDeployException: Error registering hook for Search1-hook
com.liferay.portal.kernel.deploy.hot.HotDeployException: Error registering hook for Search1-hook
at com.liferay.portal.kernel.deploy.hot.BaseHotDeployListener.throwHotDeployExcepti­on(BaseHotDeployListener.java:46)
at com.liferay.portal.deploy.hot.HookHotDeployListener.invokeDeploy(HookHotDeployLi­stener.java:271)
at com.liferay.portal.kernel.deploy.hot.HotDeployUtil._doFireDeployEvent(HotDeployU­til.java:111)
at com.liferay.portal.kernel.deploy.hot.HotDeployUtil._fireDeployEvent(HotDeployUti­l.java:188)
at com.liferay.portal.kernel.deploy.hot.HotDeployUtil.fireDeployEvent(HotDeployUtil­.java:40)
at com.liferay.portal.kernel.servlet.HookContextListener.contextInitialized(HookCon­textListener.java:36)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4205­)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4704)
at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1282)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1380)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:306)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.ja­va:142)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1385­)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChild­ren(ContainerBase.java:1649)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChild­ren(ContainerBase.java:1658)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(Containe­rBase.java:1638)
at java.lang.Thread.run(Thread.java:619)

I am glad it's resolved now, hope this will help others!
Gepostet am 02.12.11 03:49.
Great feature so far! ... but...

I am trying to create a jsp-Hook for the portlet-configuration tabs. I already figured out, my struts action has to extend BaseStrutsPortletAction. But if I add my own Action there, I get the error

2011-12-12 16:04:00 ERROR [PortletRequestProcessor:377] Forward does not exist

Any help or hint would be great!

(see also: this forum post )
Gepostet am 13.12.11 00:09.
I'm able to wrap the message_boards/view action as you describe here. But when I attempt to wrap /login/facebook_connect_oauth I get a runtime exception: com.liferay.portal.struts.PortletActionAdapter cannot be cast to com.liferay.portal.struts.ActionAdapter.

If I instead extend the class BaseStrutsAction as below, the facebook login functionality ceases to work properly. Is there something fundamentally different about the FacebookConnectAction class or am I doing something wrong?

public class FacebookMyConnectAction extends BaseStrutsAction {

@Override
public String execute(StrutsAction originalStrutsAction,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// TODO Auto-generated method stub
return super.execute(originalStrutsAction, request, response);
}
Gepostet am 31.12.11 12:45 als Antwort auf Jana Volkmer.
This is a nice feature indeeed, but there seems to be a bug when wrapping actions that are sending redirects. In my case I'm trying to wrap com.liferay.portal.action.LoginAction (/c/portal/login) with a custom action.

In liferay-hook.xml I have the following:

<hook>
<portal-properties>portal.properties</portal-properties>
<struts-action>
<struts-action-path>/portal/login</struts-action-path>
<struts-action-impl>PortalLoginAction</struts-action-impl>
</struts-action>
</hook>

Then, my PortalLoginAction -class has the following appearance:

public class PortalLoginAction extends BaseStrutsAction {

@Override
public String execute(StrutsAction originalStrutsAction, HttpServletRequest request, HttpServletResponse response)
throws Exception {
//custom code
return originalStrutsAction.execute(request, response);
}
}

Everything works well here until reaching the execution of the original action. The problem seems to be that LoginAction.execute() uses response.sendRedirect() and returns null. The execute() method in com.liferay.portal.struts.StrutsActionAdapter in turn expects the original action to return an ActionForward, thus resulting in a NullPointerException (line 48).

Does anyone know a workaround for this problem? I'm using Liferay 6 EE SP2 and I wouldn't like to make any custom fixes to the code.
Gepostet am 05.01.12 06:39.
I have also hit the same exact problem as Rex Petersen has above. In my case I am trying to override the action for the UpdateReminderQueryAction. The blog post does not make it obvious why the wrapper example above is extending BaseStrutsPortletAction. It is doing so because the action class for message boards view extends PortletAction.

Rex, in the body of your execute method listed above replace the call to super.execute() with this instead:

return originalStrutsAction.execute(request, response);

Mika, if you could enhance your blog to mention this part of the process it would be greatly appreciated.
Gepostet am 06.01.12 13:31 als Antwort auf Jon Haikarainen.
Hey can you open a ticket for this and post the ticket number here. It should work with returning null as the forward.
Gepostet am 06.01.12 13:56 als Antwort auf Trevor Ackerman.
I'm assuming you are responding to Jon Haikarainen. right?
Gepostet am 09.01.12 13:53 als Antwort auf Mika Koivisto.
Finally I got the ticket for the NullPointerException -case created: LPS-24734.

Personally I don't however have a problem with this anymore as it turned out that customizing the action wasn't necessary in this case.
Gepostet am 10.01.12 03:35 als Antwort auf Trevor Ackerman.
Gepostet am 18.01.12 12:37.
R V this is implemented in 6.1.0 CE and backported to 6.0 EE SP2 so not available in 6.0.6 CE.
Gepostet am 18.01.12 12:46 als Antwort auf R V.
When I override an existing JSP e.g. lets say blogs/search.jsp, I faced couple of problems

1. I am not able to use the existing struts path "/blogs/search" eventhough I override the same in my hook.xml, its picking my class only when I give a alternate search path like "/blogs/search1"

2. When i return the existing JSP page via the Struts Portlet Action render method I see the basic Portlet CSS styles are gone.

Any thoughts on what I am missing and ways to fix them ?
Gepostet am 07.02.12 16:01 als Antwort auf Mika Koivisto.
[...] Now here’s the relatively new way to inject our own logic for this struts action without resorting to the Ext mechanism. (The current documentation on how to do this may be found in this Liferay Blog... [...] Read More
Gepostet am 10.02.12 08:18.
[...] Buenos días. A ver si alguien me pude echar una mano con mi problema. Estoy desarrollando un hook del Asset Publisher en el cual es necesario que añada un nuevo checkbox en la pagina de configuración... [...] Read More
Gepostet am 13.02.12 01:47.
Is it posible to extend Action that are defined in liferay/.../liferay-portlet.xml, for examle:

<portlet>
<portlet-name>56</portlet-name>
<icon>/html/icons/journal_content.­png</icon>
<struts-path>journal_content</struts-path>
<configuration-action-­class>com.liferay.portlet.journalcontent.action.ConfigurationActionImpl</configu­ration-action-class>
...
Gepostet am 21.02.12 07:34 als Antwort auf .
Mark, unfortunately no. You can only extend actions that are defined in struts-config.xml
Gepostet am 21.02.12 11:14 als Antwort auf Mark Stein.
Gepostet am 27.02.12 15:07 als Antwort auf Mika Koivisto.
Hi all
this is cool feature and i am trying to implement this but i have one question
the default liferay action classes extends PortletAction class which is in portal-impl has method like getForward(),setForward(),sendRedirect(),

now when i am override class i am replacing extends PortletAction with BaseStrutsPortletAction in that i am unable to get those methods for that what i need to change any one can give update
Gepostet am 28.03.12 03:03 als Antwort auf Scott Lee.
Hi,
I got class cast exception when I access URL : [localhost:8080/c/message_boards/view]

02:50:33,129 ERROR [StripFilter:59] java.lang.ClassCastException: com.liferay.portal.struts.PortletActionAdapter cannot be cast to com.liferay.porta
struts.ActionAdapter
java.lang.ClassCastException: com.liferay.portal.struts.PortletActionAdapter cannot be cast to com.liferay.portal.struts.ActionAdapter
at com.liferay.portal.struts.PortalRequestProcessor.processActionCreate(PortalReque­stProcessor.java:485)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:230)
at com.liferay.portal.struts.PortalRequestProcessor.process(PortalRequestProcessor.­java:174)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at com.liferay.portal.servlet.MainServlet.callParentService(MainServlet.java:533)
at com.liferay.portal.servlet.MainServlet.service(MainServlet.java:510)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilt­erChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.­java:210)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(In­vokerFilterChain.java:72)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:121)
at com.liferay.portal.servlet.filters.strip.StripFilter.processFilter(StripFilter.j­ava:304)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFi­lter(InvokerFilterChain.java:203)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(In­vokerFilterChain.java:105)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:121)
at com.liferay.portal.servlet.filters.gzip.GZipFilter.processFilter(GZipFilter.java­:123)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFi­lter(InvokerFilterChain.java:203)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(In­vokerFilterChain.java:105)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:121)
at com.liferay.portal.servlet.filters.secure.SecureFilter.processFilter(SecureFilte­r.java:201)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFi­lter(InvokerFilterChain.java:203)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(In­vokerFilterChain.java:105)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:121)
at com.liferay.portal.servlet.filters.sso.ntlm.NtlmPostFilter.processFilter(NtlmPos­tFilter.java:83)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFi­lter(InvokerFilterChain.java:203)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(In­vokerFilterChain.java:105)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:121)
at com.liferay.portal.sharepoint.SharepointFilter.processFilter(SharepointFilter.ja­va:80)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFi­lter(InvokerFilterChain.java:203)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(In­vokerFilterChain.java:105)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:121)
at com.liferay.portal.servlet.filters.virtualhost.VirtualHostFilter.processFilter(V­irtualHostFilter.java:208)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFi­lter(InvokerFilterChain.java:203)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(In­vokerFilterChain.java:105)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDire­ctCallFilter(InvokerFilterChain.java:184)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(In­vokerFilterChain.java:92)
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.jav­a:738)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFi­lter(InvokerFilterChain.java:203)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(In­vokerFilterChain.java:105)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDire­ctCallFilter(InvokerFilterChain.java:164)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(In­vokerFilterChain.java:92)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDire­ctCallFilter(InvokerFilterChain.java:164)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(In­vokerFilterChain.java:92)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDire­ctCallFilter(InvokerFilterChain.java:184)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(In­vokerFilterChain.java:92)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(Invoker­Filter.java:70)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilt­erChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.­java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:2­24)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:1­69)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.jav­a:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118­)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor­.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractPro­tocol.java:539)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)­
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:8­86)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Gepostet am 18.04.12 19:52.
i want to create a hook for blog portlet and add image uploading and displaying those images in thumnails how should i proceed
Gepostet am 19.04.12 04:35.
Hello Mika Koivisto and other Liferay experts,

I need to validate users on login with information they will enter into custom fields compared with that which is already in the database. After validation, I want to proceed to the login process by issuing them a temporary password. Can this be done in a hook-struts override using CreateAccountAction? Any help, tips, advice you have would be most appreciated. Thanks in advance!
Gepostet am 16.05.12 08:40 als Antwort auf iqbal ahmed.
[...] I have recently been working on a task to customize some of the aspects of Liferay's built in Login portlet. This article describes how to take advantage of the simple configuration items provided by... [...] Read More
Gepostet am 17.05.12 15:46.
Hello!
I read your article several times, and found it to be very useful. I have implemented many of the features you outlined so clearly in your post. THANKS! The situation now is that we have a database of users that have some fields pre-populated: first name, last name, gender, and birthdate. On first time login, I need them to complete their registration, then login. I'm wondering which fields will trigger the Associate Account button, which allows a user to complete the login process. Any ideas?
Gepostet am 21.05.12 08:42 als Antwort auf .
[...] Hi, even if your statement is true, I got the error : Only a type can be imported. x.y.service.XServiceUtil resolves to a package When accessing to my service in my override jsp. As Maxim Kovalev, I... [...] Read More
Gepostet am 18.06.12 09:41.
[...] Hello, Version : Liferay EE 6.0 SP2 Business case: Override the terms of use according to the login user role I am trying to override the UpdateTermsOfUseAction class using liferay hook as per the... [...] Read More
Gepostet am 11.07.12 02:03.
Hi Yana,
i would like to answer (maybe too late...)
try use in your overridden render method:
return originalStrutsPortletAction.render(originalStrutsPortletAction, portletConfig, renderRequest, renderResponse);
Gepostet am 22.08.12 06:14 als Antwort auf .
It is a bit challenging to add a new action with a custom jsp and ensuring that the jsp is wrapped into the theme properly. I have got the solution and it works like a charm. You can find the solution here : http://www.liferayaddict.com/home/-/blogs/new-action-in-hook-in-liferay-6-1
Gepostet am 07.10.12 03:09 als Antwort auf Sven Kwiotek.
Awesome feature, using it 1st time Liferay rocks emoticon
Gepostet am 03.12.12 03:50.
nice feature it is. However I'm running into problems with my example:
I would like to override only one method (the processAction method) of the EditUserAction (enterprise-admin). I ended up with the following:
public class MyEditUserAction extends BaseStrutsPortletAction {

@Override
public void processAction(StrutsPortletAction originalStrutsPortletAction,
PortletConfig portletConfig, ActionRequest actionRequest,
ActionResponse actionResponse) throws Exception {

String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
...

now the obvious problem: How do I access the protected methods implemented in the original EditUserAction, like sendRedirect() or addUser()?
Normally I would have extended EditUserAction overriding just one method. But with the Action sitting in portal-impl I can't and have to use the BaseStrutsPortletAction. So it seems I have to repeat the complete implementation of EditUserAction in MyEditUserAction, which I consider not good practice and not upgrade-safe.
What we'd need is a wrapper mechanism as it exists for services.
Any ideas on this?

Thanks.
Gepostet am 13.12.12 02:11.
[...] shivam aggarwal: Hi Apoorva, I was trying to implement the solution you provided.Regarding the CustomLayoutAction class,I used a hook for it. But on deployment,following exception is thrown Caused by:... [...] Read More
Gepostet am 13.12.12 09:18.
Hi
Does tiles-defs-ext.xml file can be put inside a hook or do I need to use ext plugin? I am looking a way to add a custom tiles definitions without using EXT. Is this possible?
Gepostet am 04.02.13 06:18 als Antwort auf Muhammed Shakir AK Misarwala.
Tiles definitions through the hook is not currently supported.
Gepostet am 04.02.13 09:16 als Antwort auf Tomasz Sokół.
[...] Hi Dave, Please refer this link. Hope that helps Thanks Rahul Sign in to vote. Flag Please sign in to flag this as inappropriate. Mark as an Answer [...] Read More
Gepostet am 17.03.13 23:59.
Trying to do the same thing (except just on add user).. Have you come to a better conclusion than rewriting the entire action class? I guess there's falling back to Ext-plugin which I was just about to do when I noticed this post about using hooks instead.. (already have a hook so would be better to just add something to it vs creating a whole new ext-plugin)
Gepostet am 04.04.13 08:17 als Antwort auf stephan t.
Hi,
I am extending "CreateAccountAction" class in custom-hook for overriding action mapping in 'struts-config.xml' b'coz i wanted to override default create-account mechanism to include extra fields for user but while deploying hook i'm getting following error.

Caused by: java.lang.NoClassDefFoundError: com/liferay/portlet/login/action/CreateAccountAction

can you help me to resolve this.
Gepostet am 25.04.13 06:58.
Hi
How to add struts action in LR 6.0.5
Thanks
Gepostet am 03.05.13 03:54.
Laxman,

I am doing something similar, but you can not override PortletAction. You can override the action mapping so that your class will be executed before the CreateAccountAction or EditUserAction class is executed. This will help because you can run validation on the user input; if the input is good, your class will re-route the execution to CreateAccountAction. Else, you can throw an error to the screen.
Secondly, are your "extra fields" custom fields? If so, the New User screen does not show the custom fields tab. Only the update user does.

Steve
Gepostet am 12.06.13 07:25 als Antwort auf Laxman Rana.
FYI, you don't even need to have as struts action mapping/wrapper in order to "get" the values of custom fields included in any UI, whether those fields are actually liferay's "custom fields" OR just some arbitrary input fields that were glued into place. The ServiceContext object has a Map called "attributes" (Map<String,Serializable>) which contains all the request parameters by name.

So, suppose you have a "ServiceWrapper" (including methods which don't actually have a "ServiceContext" parameter). You can get the request parameters there.

Where the ServiceContext is a parameter, then you simply need to get the parameter by calling:

serviceContext.getAttribute("name")

OR for safety:

ParamUtil.getString(serviceContext, "name", "default");

If you happen to be in a method which does NOT have a ServiceContext parameter, do not fret. There is a thread local specially for that:

ServiceContextThreadLocal.getServiceContext()

HTH
Gepostet am 12.06.13 07:35 als Antwort auf Steven Linzer.
Ray,

On your comment: "you don't even need to have as struts action mapping/wrapper in order to "get" the values of custom fields", I agree fully. I was just saying that in order to "add to" the create/edit user functionality such as adding some server-side validation, you would need to override that action in the struts-config (in a hook) and insert your own StructsPortletAction.

Regards,
Steve
Gepostet am 13.06.13 10:41 als Antwort auf Ray Augé.
Same as Zhidao Xu here! I'm getting a ClassCastException:
com.liferay.portal.struts.ActionAdapter cannot be cast to com.liferay.portal.struts.PortletActionAdapter
I have made a message entry for this issue: https://www.liferay.com/es/community/forums/-/message_boards/message/30102664
Gepostet am 03.10.13 07:49.
Hi Mika,
I tried to override /polls/view by extending BaseStrutsPortletAction,
I referenced my struts action classe in my file liferay-hook.xml.
The probleme is whenI deploy my hook, my classe action iss never called.
I Wonder if it's not because in struts-config.xml action /polls/view is not referencin a classe action but a jsp (<action path="/polls/view" forward="portlet.polls.view"/>).
Please can you help me to overcome this issue.
Many thanks.
Nabil
Gepostet am 11.02.14 13:58.
Nabil, we don't currently support overriding forwards. There's a feature request for that. https://issues.liferay.com/browse/LPS-44115
Gepostet am 11.02.14 14:16 als Antwort auf Nabil Bahtat.
Thanks Mika,
is there any workaround ?
Thanks,
Nabil
Gepostet am 11.02.14 21:44 als Antwort auf Mika Koivisto.
I'm trying to override OpenIdAction using feature described in this article, but I am getting NoClassDefFoundError exceptions. I described my problem here
https://www.liferay.com/community/forums/-/message_boards/view_message/35589­747#_19_message_35589747
Is it possible to override OpenIdAction with the method you described?
Gepostet am 12.03.14 07:13.
*correct link is
https://www.liferay.com/community/forums/-/message_boards/message/35589747
Gepostet am 24.04.14 03:08 als Antwort auf pspyra pspyra.
Hi Mohamed,
when I followed the link you gave, I could not find your source code.
Please I need your help.
Thanks,
Nabil
Gepostet am 13.07.14 06:44 als Antwort auf Muhammed Shakir AK Misarwala.
Hi Muhammed,
I am trying to implement a similar thing where I have a custom jsp and trying to load a theme up for the custom jsp. I tried accessing the link that you provided, but it does not work. If you have another link or could provide some pointers, I would be very grateful.

Thanks
Mashuk
Gepostet am 18.07.14 01:13 als Antwort auf Muhammed Shakir AK Misarwala.