I have successfully built a portlet for liferay 4.3.6 & 5.x using
struts. I am now porting this over to work in
Jboss portal 2.6.6... everything is working except for the ability to store values in preferences. Liferay must be more accepting of poor code because it works fine, but jboss tells me :
Store must be called within the scope of an action request
Here is the class I'm using:
package com.portlet.test_test.action;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import javax.portlet.PortletPreferences;
import javax.portlet.ReadOnlyException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.ValidatorException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.test.test_test.FileCreator;
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse res) {
RenderRequest pReq = (RenderRequest) req
.getAttribute("javax.portlet.request");
RenderResponse rRes = (RenderResponse) req
.getAttribute("javax.portlet.response");
PortletPreferences pr = (PortletPreferences) pReq.getPreferences();
String fwd = "portlet.test_test.view";
String alreadyOK = pr.getValue("verified", "");
String isOK = null;
String keytext = req.getParameter("licenseKey");
if ((null != keytext) && (!keytext.equals(""))) {
FileCreator fc = new FileCreator();
String success = null;
try {
success = fc.makeKeyFile(keytext);
} catch (IOException e) {
System.out.println("Error writing key file: " + e);
}
}
if ((alreadyOK == null) || (!alreadyOK.equals("1"))) {
FileReader fr = new FileReader();
try {
isOK = fr.getLines(pReq, rRes);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (ReadOnlyException e) {
e.printStackTrace();
} catch (ValidatorException e) {
e.printStackTrace();
} finally {
if ((null != isOK) && (isOK.equals("1"))) {
try {
pr.setValue("verified", "1");
// pr.store();
return mapping.findForward(fwd);
} catch (ReadOnlyException e) {
e.printStackTrace();
}
}
}
} else {
isOK = "1";
}
if ((null == isOK) || (!isOK.equals("1"))) {
fwd = "portlet.test_test.license";
}
return mapping.findForward(fwd);
}
}
Why does jboss hate me?
Thanks for your help..
Bryancan