Изменить портлет сообщений в liferay

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);
    }
}

}

вид.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>

редактировать.jsp

<%@ 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>

Это проверенный код моего портлета "edit-greeting". Вопрос в том, как мне сделать локализацию??? Я прочитал много документов, но это все напрасно. Я создал в WEB-INF папку src/language.properties и src/language_es.properties. Что я должен делать дальше? Помоги мне, пожалуйста. @Шивам


person Al.Boldyrev    schedule 19.07.2016    source источник
comment
Я скоро обновлю свой ответ дополнительным фрагментом, используя действие процесса.   -  person Shivam Aggarwal    schedule 26.07.2016
comment
Просто обновите это с помощью ‹a href=${viewGreetingURL}›.   -  person Shivam Aggarwal    schedule 08.08.2016
comment
МОЙ БОГ. Я до сих пор не могу привыкнуть к jstl. Большое спасибо. Еще один вопрос. После сохранения моего сообщения я получаю Ваш запрос выполнен успешно. в зеленом поле, и он не исчезает. Что мне делать в этом случае? @Шивам   -  person Al.Boldyrev    schedule 08.08.2016
comment
Кажется, вам нужно покопаться в некоторых материалах Liferay! Это легко изучить.   -  person Shivam Aggarwal    schedule 08.08.2016
comment
@ShivamAggarwal, помогите мне, пожалуйста.   -  person Al.Boldyrev    schedule 10.08.2016
comment
stackoverflow .com/questions/11683652/   -  person Shivam Aggarwal    schedule 10.08.2016
comment
@ShivamAggarwal нет-нет-нет, я не об этом. Я о некоторых проблемах интернационализации. Как я могу использовать интернационализацию в коде Java?   -  person Al.Boldyrev    schedule 10.08.2016
comment
Я предлагаю создать новый вопрос, будучи вообще новой темой   -  person Shivam Aggarwal    schedule 11.08.2016


Ответы (1)


Чтобы ответить на ваш вопрос 1) Вы можете обрабатывать свои атрибуты и настройки портлета в методе рендеринга и устанавливать их в качестве атрибутов в запросе на рендеринг, который впоследствии можно прочитать в вашем jsp через какой-либо язык сценариев, например jstl 2) Нет необходимости вносить изменения в файл портлет.xml. Параметры инициализации, как следует из названия, добавляются для предоставления некоторых параметров, необходимых для инициализации представления портлета.

Вам необходимо внести следующие изменения в метод рендеринга

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);
}

В view.jsp и edit.jsp не потребуется никаких изменений (кроме удаления кода), поэтому я забыл упомянуть об этом. Что касается метода рендеринга, лучшим подходом было бы определенно использовать URL-адрес действия и использовать метод действия, но, поскольку кажется, что вы хотите опробовать какой-то подход и внести минимальные изменения в свой, я оставил его только для рендеринга. Что касается кода, prefs.getValue("greeting","true") проверяет, присутствует ли определенный атрибут в настройках портлета или нет.

Обновлено действием процесса

открытый класс NewPortlet расширяет MVCPortlet {

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);
    }

}

}

Обновления в редакторе jsp

  <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>
person Shivam Aggarwal    schedule 22.07.2016
comment
Я подумал, что мы должны использовать taglib actionURL и переопределить метод ProcessAction(), чтобы достичь моей цели. - person Al.Boldyrev; 24.07.2016
comment
Извините, ваш ответ не очень хорош по двум причинам: 1. Что должно быть в файлах jsp? 2. Почему у вас одинаковая логика в конструкциях if и else? Это выглядит не очень хорошо :/ Может быть, я просто не понимаю этого - person Al.Boldyrev; 25.07.2016
comment
Извините, у меня второй вопрос. Но у меня до сих пор нет первого. :( - person Al.Boldyrev; 25.07.2016
comment
Я предполагал, что мы должны просто написать ${greeting} в view.jsp, но он показывает только true, и я не понимаю, почему. - person Al.Boldyrev; 25.07.2016
comment
@ Александр, я обновил свой ответ, пожалуйста, обратитесь и дайте мне знать для большей ясности. - person Shivam Aggarwal; 25.07.2016
comment
Я ответил вам выше. - person Al.Boldyrev; 25.07.2016
comment
Обновленный ответ с действием процесса! - person Shivam Aggarwal; 26.07.2016
comment
Спасибо большое. Действительно. У меня недостаточно репутации, чтобы проголосовать за все ваши комментарии. Кстати, у меня новая проблема с другим портлетом. Можете ли вы помочь мне, пожалуйста, еще раз? Я новичок в разработке лайфрей, поэтому сталкиваюсь с множеством проблем.. - person Al.Boldyrev; 26.07.2016
comment
В любое время, чувак... ты, конечно, можешь задать новый вопрос, если он не связан именно с портлетом редактирования сообщений в liferay. - person Shivam Aggarwal; 26.07.2016