Liferay 7:隐藏的 aui 输入不会根据参数设置值

Liferay 7: hidden aui input won't set value based on parameter

我有一个带有主键和另外两个字段的实体。 我能够在主视图 JSP 的搜索容器中显示它们,并且我想实现一个 edit/update 函数,因此我为此创建了一个不同的 JSP。我在 portlet:renderURL portlet:param[= 中传递了我希望编辑的实体的属性30=] 标签就像这样:

<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中,如果我将任何输入字段设置为隐藏,基于参数的值就会消失,因此控制器无法处理字段的值。

即:

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

注意:我只想隐藏主键字段,controller servlet 应该能够处理它并根据主键更新我的实体,像这样:

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

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

有什么办法可以解决这个问题吗?

对我有用

view.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);

    }
}

你有没有发现任何遗漏的代码?

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

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

我所做的是请求存储在 JSP 脚本中的参数中的所需值,就像这样:

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

提前致谢!