2013-07-10 2 views
1

Я вижу себя лицом к лицу с легкой задачей, и я чувствую, что иду в неправильном направлении. Мне нужно иметь всплывающее окно, когда пользователь посещает целевую страницу по умолчанию. Это всплывающее окно должно отображать внешнюю веб-страницу (некоторые элементы входа, которые мы не можем обойти с помощью одного знака) в iframe или около того. Поскольку только некоторые пользователи должны использовать это диалоговое окно, мы хотим дать возможность не иметь это всплывающее окно снова (с помощью cookie или DB, это нормально, если сброс этой опции должен быть выполнен вручную администраторами). Поэтому в основном нам нужно «Не спрашивать снова» -popup с iframe.«Не спрашивайте еще раз» -попуп в пожизненном листе

Мы решили поместить портлет MVC на целевую страницу, которая не имеет размера; только всплывающее окно. У меня есть всплывающее окно AlloyUI с iframe, флажок и ощущение, что это неправильный способ, поскольку я не могу получить информацию из этого флажка, когда всплывающее окно закрывается.

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

<aui:script> 

    AUI().ready('aui-dialog', 'aui-overlay-manager', 'dd-constrain', 'console', 
     function(A) { 

      var bodyNode = A.Node.create('<div><iframe src="http://www.dummysite.com"></iframe> </div>'); 
      var footerNode = A.Node.create('<input name="donotaskagain" type="checkbox"></input> <label for="donotaskagain">Do not ask again</label>'); 

      var dialog = new A.Dialog({ 
       title: 'DISPLAY CONTENT', 
       centered: true, 
       modal: true, 
       resizable: false, 
       width: 510, 
       height: 430, 
       bodyContent: bodyNode, 
       footerContent: footerNode 
      }); 
      dialog.render(); 
     } 
    ); 
</aui:script> 

Надеюсь, вы можете мне помочь. Всем приветствуется вся информация о том, как правильно использовать JSP, AlloyUI и Java в этом контексте.

ответ

0

Мы обошли эту проблему, представив форму для нижнего колонтитула всплывающего окна, которое будет отправлено, когда пользователь нажмет кнопку сохранения. Это не оптимально, так как страница нуждается в обновлении, но поскольку всплывающее окно больше не появляется, это приемлемо. Возможно, кто-то другой мог бы опубликовать сообщение с помощью AJAX, поэтому поведение этого более плавное.

Во-первых, мы имеем View.jsp:

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

<portlet:actionURL name="storeDoNotAskAgain" var="storeDoNotAskAgainURL"></portlet:actionURL> 

<!-- Check here whether or not the popup should be shown. We used JSP tags (an "if" around the script) 
    and a JAVA helper class to access the Expandobridge to get a variable from the Liferay DB 
    to decide whether or not the user had chosen not to display the popup again. 
<!-- Create Alloy UI dialog with iframe pointing to the specified site as a body and form as footer. 
    The form can be submitted to store the "do not ask again"-checkbox value in DB. 
    It is connected with an action from of the portlet. --> 
<aui:script> 

    AUI().ready('aui-dialog', 'aui-overlay-manager', 'dd-constrain', 
     function(A) { 

      var bodyNode = A.Node.create('<div><iframe src="http://www.dummysite.com"> </iframe> </div>'); 
      var footerNode = A.Node.create('<form action="<%= storeDoNotAskAgainURL%>" method="post"><input type="submit" value="Save" class="submit"><input name="donotaskagain" type="checkbox"></input> <label for="donotaskagain">Do not ask again.</label></form>'); 

      var dialog = new A.Dialog({ 
       title: "Title", 
       bodyContent: bodyNode, 
       footerContent: footerNode 
      }); 
      dialog.render(); 
     } 
    ); 
</aui:script> 

Затем мы создали новый портлет основной класс для обработки магазина-действия, на который ссылается форме.

package com.example.portlet; 

import ... 

public class MyPortlet extends MVCPortlet { 

    @ProcessAction(name = "storeDoNotAskAgain") 
    public void storeDoNotAskAgain(ActionRequest request, ActionResponse response) throws Exception { 
     boolean val = ParamUtil.getBoolean(request, "donotaskagain", false); 
     // store boolean in db or a file 
    } 
} 

проформа: Вам нужно настроить portlet.xml указать портлет основного класса нового портлета класс

<portlet-class>com.example.portlet.MyPortlet</portlet-class> 

 Смежные вопросы

  • Нет связанных вопросов^_^