我在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中的首选项都不起作用。
我做错了什么?这是保存这些数据的错误方法吗?
提前致谢!
答案 0 :(得分:0)
您应该实现配置操作以保存首选项,或使用Liferay的DefaultConfigurationAction。
但是,更改saveControlPanelSettings操作中获取首选项的方式可能有效:
PortletPreferences preferences;
String portletResource = ParamUtil.getString(request, "portletResource");
if (Validator.isNotNull(portletResource)) {
preferences = PortletPreferencesFactoryUtil.getPortletSetup(request, portletResource);
}