【问题标题】:Liferay autofields - how to pass variables from edit.jsp to view.jsp?Liferay 自动字段 - 如何将变量从 edit.jsp 传递到 view.jsp?
【发布时间】:2014-06-13 00:06:51
【问题描述】:

我对 Liferay 自动字段有疑问。在我的 portlet 的 edit.jsp 中,我可以添加字段并保存它。回到 view.jsp 后,字段不再可用。

我希望我的项目列表都在两个 jsp 中,这可能实现吗?

这是我的edit.jsp 代码:

 <portlet:defineObjects />

 <portlet:renderURL var="editItemURL">
     <portlet:param name="jspPage" value="/edit.jsp" />
 </portlet:renderURL>

 <portlet:renderURL var="viewItemURL">
     <portlet:param name="jspPage" value="/view.jsp" />
 </portlet:renderURL>

 <%
 PortletPreferences prefs = renderRequest.getPreferences();

 List<String> items = Collections.emptyList();

 String itemIndexesParam = renderRequest.getParameter("itemIndexes");

 if (itemIndexesParam != null) {    

 prefs.setValue("itemIndexes", itemIndexesParam);

 prefs.store();
 }

 int[] itemIndexes = null;

 if (Validator.isNotNull(itemIndexesParam)) {
items = new ArrayList<String>();

itemIndexes = StringUtil.split(itemIndexesParam, 0);

for (int i = 0; i < items.size(); i++) {
prefs.setValue("items"+i, items.get(i));
itemIndexesParam = String.valueOf(itemIndexes[i]);
    prefs.store();
}
 }
 else {
if (items.isEmpty()) {
    items = new ArrayList<String>();
    itemIndexes = new int[] {0};
}

if (itemIndexes == null) {
    itemIndexes = new int[0];
}
 }

for (int i = 0; i < itemIndexes.length ; i++) {
    items.add(i, (String)prefs.getValue("item"+i, "hello"));
}

%>

<h1>Liferay auto fields example</h1>
<aui:form action="<%= editItemURL%>" method="post" name="LiferayAautoFieldForm"      id="add-menu-item">
<div id="menu-fields">
 <%
     for (int i = 0; i < itemIndexes.length; i++) {
                 int menuIndex = itemIndexes[i];
                 String name = items.get(i);
     %>
    <aui:model-context bean="<%= name %>" model="<%= String.class %>" />

    <div class="lfr-form-row lfr-form-row-inline">
    <div class="row-fields">
        <aui:input label="Content:" fieldParam='<%= "menuItem" + menuIndex %>' name='<%= "item" + menuIndex %>' id='<%= "menuItem" + menuIndex %>' type="textarea" value=""/>
    </div>
</div>
<%
   }
%>
<aui:input name="itemIndexes" type="hidden" value="<%= StringUtil.merge(itemIndexes) %>" />
</div>
<aui:layout>
    <aui:column>
        <aui:button type="submit" value="Save Menu Items" name="SaveMenuItems" ></aui:button>
    </aui:column>
</aui:layout>

<aui:script use="liferay-auto-fields">
new Liferay.AutoFields(
   {
       contentBox: '#menu-fields',
       fieldIndexes: '<portlet:namespace />itemIndexes'
   }
).render();
</aui:script>
</aui:form>

items list = <%= items %> <br>
item size = <%= items.size() %> <br>

<a href="<%= viewItemURL %>"><input type="submit" class="submit-button" value="Exit edit mode" id="opener"></a>

view.jsp 我正在使用:

<%
PortletPreferences prefs = renderRequest.getPreferences();

String itemIndexesParam = renderRequest.getParameter("itemIndexes");

List<String> items = new ArrayList<String>();

int[] itemIndexes = StringUtil.split(itemIndexesParam, 0);

for (int itemIndex : itemIndexes) {
items.add(itemIndex, (String)prefs.getValue("item"+itemIndex, "hello"));
}
%>

<portlet:renderURL var="editNavigationURL">
    <portlet:param name="jspPage" value="/edit.jsp" />
</portlet:renderURL>

items list = <%= items %> <br>
item size = <%= items.size() %> <br>

我的自动字段代码(希望)工作正常,但我无法将任何内容传回 view.jsp。

我错过了什么?

非常感谢您的帮助!

【问题讨论】:

    标签: java jsp liferay autofield


    【解决方案1】:

    从 request 获取编辑控制器中的 itemIndexes 参数后,您必须将其设置为 actionResponse 中的渲染参数。

    【讨论】:

    • 感谢您的回答。但在渲染请求下方添加actionResponse.setRenderParameter("itemIndexes", itemIndexesParam); 后,我得到空指针异常。
    • 您究竟从哪里获得 NPE?
    • 异常是直接用actionResponse添加的新行抛出的。我是 Liferay 的新手,所以我可能误解了你的建议。也许我应该把它放在其他地方?
    • 好的,问题解决了——正如你所说的那样。感谢您的帮助!
    猜你喜欢
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多