在Liferay中存储和读取配置

时间:2013-12-03 16:28:31

标签: java jsp liferay portlet liferay-6

我在portlet中使用PortletPreferences时遇到问题。 doView(...)方法会显示正常的 view.jsp 或自定义的jsp,名为 controlpanel.jsp ,具体取决于网页ID( controlpanel.jsp 显示在Liferays ControlPanel中, view.jsp 其他地方。

我在controlpanel页面中添加了一个表单,用户可以在其中输入数据库属性。当用户提交表单时,如果数据不为空,则将处理并保存数据。这是我的行动方法:

@ProcessAction(name="saveControlPanelSettings")
public void saveControlPanelSettings(ActionRequest actionRequest,
        ActionResponse actionResponse) throws ReadOnlyException, ValidatorException, IOException {
    String host, port, user, pass;

    host = ParamUtil.get(actionRequest, "host", StringPool.BLANK);
    port = ParamUtil.get(actionRequest, "port", StringPool.BLANK);
    user = ParamUtil.get(actionRequest, "user", StringPool.BLANK);
    pass = ParamUtil.get(actionRequest, "password", StringPool.BLANK);

    if(host.equals(StringPool.BLANK) || port.equals(StringPool.BLANK) || 
            user.equals(StringPool.BLANK)) {
        SessionErrors.add(actionRequest, "blank-fields");
    } else {
        PortletPreferences prefs = actionRequest.getPreferences();
        prefs.setValue("host", host);
        prefs.setValue("port", port);
        prefs.setValue("user", user);
        prefs.setValue("password", pass);
        prefs.store();
        System.out.println(String.format("Settings saved... [host: %s]",
                prefs.getValue("host", "NULL")));
    }
}

拉取主机首选项的最后一行显示控制台中的正确字符串。然后控制面板页面也填充正确的数据。但是,如果我尝试在 view.jsp 中显示设置,则不会返回任何内容! :(

这是我的doView(...)

@Override
public void doView(RenderRequest renderRequest,
        RenderResponse renderResponse) throws IOException, PortletException {

    ThemeDisplay themeDisplay =
            (ThemeDisplay)renderRequest.getAttribute(WebKeys.THEME_DISPLAY);
    String themeId = themeDisplay.getThemeId();

    String jsp;

    if(themeId.equalsIgnoreCase("controlpanel")) {
        jsp = "/html/ekmsserviceoverview/controlpanel.jsp";
    } else {
        jsp = "/html/ekmsserviceoverview/view.jsp";
        PortletPreferences prefs = renderRequest.getPreferences();
        renderRequest.setAttribute("test", prefs.getValue("host", "NULL"));
    }

    this.viewTemplate = jsp;

    super.doView(renderRequest, renderResponse);
}

controlpanel.jsp 中,我可以通过portletPreferences.getValue("host", "")获取偏好设置。在 view.jsp 中,通过设置renderRequest.setAttribute(...),该方法和jsp中的首选项都不起作用。

我做错了什么?这是保存这些数据的错误方法吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

您应该实现配置操作以保存首选项,或使用Liferay的DefaultConfigurationAction。

但是,更改saveControlPanelSettings操作中获取首选项的方式可能有效:

PortletPreferences preferences;
String portletResource = ParamUtil.getString(request, "portletResource");
if (Validator.isNotNull(portletResource)) {
    preferences = PortletPreferencesFactoryUtil.getPortletSetup(request, portletResource);
}