我对Liferay autofields有疑问。在我的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>
我的autofields代码(希望)工作正常,但我无法将任何内容传递回view.jsp。
我错过了什么?
非常感谢您的帮助!
答案 0 :(得分:0)
从请求中获取编辑控制器中的itemIndexes参数后,您必须在actionResponse中将其设置为渲染参数。