0

我有一个带有主键和其他两个字段的实体。我能够在我的主要 View JSP 的搜索容器中显示它们,并且我想实现一个编辑/更新功能,所以我为此创建了一个不同的 JSP。我在portlet:renderURL portlet:param标签中传递我希望编辑的实体的属性,如下所示:

<portlet:renderURL var="editEntity">
    <portlet:param name="jspPage" value="/update-page.jsp" /> 
    <portlet:param name="primaryKey" value="<%= entityId %>" /> 
    <portlet:param name="name" value="<%= entityName%>" /> 
    <portlet:param name="description" value="<%= entityDesc%>" /> 
</portlet:renderURL>

在更新页面 JSP 中,如果我将任何输入字段设置为隐藏,则基于参数的值会消失,因此控制器无法处理字段的值。

IE:

<aui:input name="primaryKey" type="hidden" value="${primaryKey}" />
<aui:input name="primaryKey" type="hidden" value="${name}" />
<aui:input name="primaryKey" type="hidden" value="${description}" />

注意:我只想隐藏主键字段,控制器 servlet 应该能够处理它并根据主键更新我的实体,如下所示:

<aui:input name="primaryKey" type="text" value="${name}" />
<aui:input name="primaryKey" type="text" value="${description}" />

有趣的是,当我设置输入字段文本类型时,一切正常,但我不希望用户输入主键,呃......

任何想法我该如何解决这个问题?

4

2 回答 2

0

这对我有用

视图.jsp

<%@ include file="init.jsp" %>
<portlet:actionURL name="testURL" var="testURL" />
<aui:form name="fm" method="post" action="<%= testURL.toString()%>">
 <aui:input name="primaryKey" type="hidden" value="123" />
 <aui:button-row>
        <aui:button name="submit" type="submit" value="OK"  />
    </aui:button-row>  
</aui:form>

TestmvcportletPortlet.java

package com.example.portlet;

import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet;
import com.liferay.portal.kernel.util.ParamUtil;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.Portlet;
import javax.portlet.ProcessAction;

import org.osgi.service.component.annotations.Component;

@Component(
 immediate = true,
 property = {
  "com.liferay.portlet.display-category=category.sample",
  "com.liferay.portlet.instanceable=true",
  "javax.portlet.display-name=Test Portlet",
  "javax.portlet.init-param.template-path=/",
  "javax.portlet.init-param.view-template=/view.jsp",
  "javax.portlet.resource-bundle=content.Language",
  "javax.portlet.security-role-ref=power-user,user"
 },
 service = Portlet.class
)
public class TestmvcportletPortlet extends MVCPortlet {

 @ProcessAction(name = "testURL")
    public void addBook(ActionRequest actionRequest,ActionResponse actionResponse) throws SystemException {
      String a = ParamUtil.getString(actionRequest, "primaryKey");
      System.out.println("Value is "+a);

    }
}

你有没有发现任何你错过的代码?

于 2017-11-14T14:57:30.567 回答
0

我找到了解决问题的方法。

因此,经过长时间的测试,我发现我无法在简单的 HTML 标记中的任何位置获取存储在参数中的值,就像${paramName}一样,但我仍然不知道为什么。

我所做的是请求存储在 JSP scriptlet 内的参数中的所需值,如下所示:

<% 
String primaryKey = request.getParameter("primaryKey");
String name = request.getParameter("name");
String description = request.getParameter("description");
%>

然后我很高兴我的表格:

<aui:form action="<%= updateAbbreviationURL %>" method="post">
    <aui:input name="primaryKey" type="hidden" value="<%= primaryKey %>" />
    <aui:input name="entityName" label="Name" type="text" value="<%= name %>" />
    <aui:input name="entityDesc" label="Description" type="text" value="<%= description %>" />
    <aui:button name="submit" value="submit" type="submit" />
    <aui:button name="cancel" value="cancel" type="button" onClick="<%= viewURL %>" />          
</aui:form>

如果有人告诉我为什么我的初始实现不起作用,我将非常感激,我的意思是指上面提到的参数值,${paramName}

提前致谢!

于 2017-11-15T08:33:58.510 回答