在liferay中编辑消息portlet

在liferay中编辑消息portlet,liferay,liferay-6,liferay-ide,Liferay,Liferay 6,Liferay Ide,} view.jsp: import java.io.IOException; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.portlet.PortletException; import javax.portlet.PortletPreferences; import javax.portlet.ReadOnlyException; import javax.port

}

view.jsp:

import java.io.IOException;
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 com.liferay.util.bridges.mvc.MVCPortlet;

public class GreetingMessage extends MVCPortlet {

public static final String GREETING = "greeting";
public static final String DEFAULT_GREETING = "Hello! It's my default greeting message";

@Override
public void render(RenderRequest request, RenderResponse response)
        throws IOException, PortletException {

    PortletPreferences preferences = request.getPreferences();
    request.setAttribute(GREETING,
            preferences.getValue(GREETING, DEFAULT_GREETING));
    super.render(request, response);
}

public void updateGreeting(ActionRequest request, ActionResponse response)
        throws ValidatorException, IOException, ReadOnlyException {

    String greeting = request.getParameter("greeting");
    PortletPreferences prefs = request.getPreferences();

    if (greeting != null) {
        prefs.setValue(GREETING, greeting);
        prefs.store();
        request.setAttribute(GREETING, greeting);
    }
}

${问候语}

edit.jsp

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %> 
<portlet:defineObjects /> 

<p>${greeting}</p>

<portlet:renderURL var="editGreetingURL">
      <portlet:param name="mvcPath" value="/html/greetingmessage/edit.jsp"/>
</portlet:renderURL>

<p><a href="${editGreetingURL}">Edit greeting</a></p>

这是我的“编辑问候语”portlet的测试代码。问题是,我如何进行本地化???我读了很多文件,但都是徒劳的。我在WEB-INF文件夹中创建了src/language.properties和src/language_es.properties。接下来我该怎么办?请帮帮我@希瓦姆回答你的问题 1) 您可以在render方法中处理属性和portlet首选项,并将它们设置为render请求中的属性,随后可以通过一些脚本语言(如jstl)在jsp中读取这些属性 2) 不需要在portlet.xml文件中进行更改。 顾名思义,添加init参数是为了提供初始化portlet视图所需的一些参数

您需要对渲染方法进行以下更改

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui" %>
<%@ page import="javax.portlet.PortletPreferences" %>

<portlet:defineObjects />

<portlet:actionURL name="updateGreeting" var="updateGreetingURL"> 
 </portlet:actionURL>

<aui:form action="<%= updateGreetingURL %>" method="post">
<aui:input label="greeting" name="greeting" type="text" value="${greeting}" />
<aui:button type="submit" />
</aui:form>

<portlet:renderURL var="viewGreetingURL"> 
     <portlet:param name="mvcPath" value="/html/greetingmessage/view.jsp" />
</portlet:renderURL>

<p><a href="${viewGreetingURL}">&larr; AND NOW IT'S BACK</a></p>
view.jsp和edit.jsp中不需要任何更改(除了删除代码),因此我忘了提及相同的内容。 至于render方法,最好的方法是使用actionurl和actionmethod,但是由于您似乎希望尝试一些方法并对您的应用程序进行最小的更改,所以我只保留render。 对于代码,
prefs.getValue(“问候语”、“true”)
检查portlet首选项中是否存在某个属性

使用流程操作更新

公共类NewPortlet扩展了MVCPortlet{

public void render(RenderRequest req,RenderResponse res) throws IOException, PortletException
{
    String greeting = req.getParameter("greeting");
    PortletPreferences prefs = req.getPreferences();
    String defaultGreeting="Hello! Welcome to our portalOLOLOLOLOL.";

    if(prefs.getValue("greeting","true")==null)
    {
        prefs.setValue("greeting", defaultGreeting);
    }
    if (greeting != null) 
    {
        prefs.setValue("greeting", greeting);
        prefs.store();
        req.setAttribute("greeting", prefs.getValue("greeting","true"));
    }
    else
    {
        req.setAttribute("greeting", prefs.getValue("greeting","true"));
    }
    super.render(req,res);
}
}

在编辑jsp中更新

public static final String GREETING="greeting";

@Override
public void render(RenderRequest req,RenderResponse res) throws IOException, PortletException
{
    PortletPreferences prefs = req.getPreferences();
    String defaultGreeting="Hello! Welcome to our portalOLOLOLOLOL.";

    if(prefs.getValue(GREETING,"true")==null)
    {
        prefs.setValue(GREETING, defaultGreeting);
        prefs.store();
    }
    req.setAttribute(GREETING, prefs.getValue(GREETING,"true"));
    super.render(req,res);
}

public void updateGreeting(ActionRequest req,ActionResponse res) throws ValidatorException, IOException, ReadOnlyException
{
    String greeting = req.getParameter("greeting");
    PortletPreferences prefs = req.getPreferences();

    if (greeting != null) 
    {
        prefs.setValue(GREETING, greeting);
        prefs.store();
        req.setAttribute(GREETING, greeting);
    }

}


我认为我们应该使用actionURL taglib和override ProcessAction()方法来实现我的目标。对不起,你的答案不太好,原因有两个:1。jsp文件中应该包含什么?2.为什么在if和else构造中有相同的逻辑?看起来不太好:/可能是我不明白。对不起,我有第二个问题。但我还没有拿到第一张(我认为我们应该在view.jsp中编写${greeting},但它显示“true”只是,我不明白为什么。@Alexandr我已经更新了我的答案,请参考并让我知道,以便进一步澄清。我将使用流程操作使用附加的代码片段更新我的答案,很快使用O.M.G.简单地更新此内容。我仍然无法习惯jstl。非常感谢。还有一个问题。保存我的邮件后,我收到了“您的请求成功完成。”在绿框中,它并没有消失。在这种情况下,我该怎么办?@ShivamYou需要深入研究liferay的一些东西。看起来,这很容易探索that@ShivamAggarwal请帮帮我。
  <portlet:actionURL name="updateGreeting" var="updateGreetingURL"> 
 </portlet:actionURL>

<aui:form action="<%= updateGreetingURL %>" method="post">
<aui:input label="greeting" name="greeting" type="text" value="${greeting}" />
<aui:button type="submit" />
</aui:form>