我是Java portlets的新手,我正在尝试处理这些东西在相当基本的水平上如何工作.
我现在很困惑如何在我的portlet中拥有多个"视图".假设我的portlet将用于CRUD操作.为了简单起见,我想象当用户第一次查看portlet时,他们会看到一个包含数据库中所有记录的表.然后,用户可以单击将在portlet中显示包含用于更新记录的表单的新页面的记录.添加记录的方式大致相同.这里没有什么令人震惊的......
我在哪里控制用户在不同视图之间导航的方式,以及在何处切换用户可能执行的不同操作(更新,添加,删除等)?
我已经在网上找到了大量的"hello world"portlet教程,但这些教程并没有多大帮助.我发现许多其他教程更先进,适合我正在做的事情,但他们似乎都使用一些底层框架,如Struts,JSF等.
我想知道如何使用JSP来渲染视图,只使用一个基本的portlet来完成这项工作.
我有一个java类
public void doView(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
//I need to pass the string variable over to my jsp
ThemeDisplay themeDisplay = (ThemeDisplay) renderRequest.getAttribute(WebKeys.THEME_DISPLAY);
String sLang_Id = themeDisplay.getLanguageId();
include("/html/mypackage/view.jsp", renderRequest, renderResponse);
}
Run Code Online (Sandbox Code Playgroud)
我怎么读sLang_Id我的jsp
<c:out value="${sLang_Id}" /> ???
Run Code Online (Sandbox Code Playgroud) 为了创建Web内容,使用Web内容portlet.这个portlet背后有什么技术?用于开发此portlet的是什么?JSP,JSF,Struts,Icefaces还是其他任何东西?
此外,是否有单独下载它的链接.
我可以使用Liferay插件SDK轻松创建Liferay portlet和主题.我已经设法将多个portlet组合成一个WAR文件,这对于在客户端站点部署非常方便.
我还为Liferay安装创建了多个主题,我想知道是否可以将所有portlet(5)和主题(2)(可能是钩子等)组合到一个WAR文件中?
我需要在portlet之间共享一个库(内部构建),我更喜欢将它放在一个公共位置,而不是将它作为依赖项添加到需要它的每个portlet,因为我想更新一次库.我可以构建一个portlet可以引用并访问库的钩子或插件吗?我知道您可以将它添加到公共库目录并将其添加到liferay-plugin-package.properties每个portlet,但位置取决于应用程序服务器.我想知道,有一个标准或更清洁的方法来做到这一点?提前致谢.
我将通过4个简单的问题总结逻辑:
以前的一些场景是否会改变父页面的行为?我的意思是,允许您对子页面的权限会使您自动获得查看父页面的权限.
此外,hidden和*non-hidde*n页面之间有什么区别?我可以通过链接浏览!
我正在尝试将参数传递给<portlet:actionURL>liferay中的portlet,但事实证明,使用EL传递值不工作,但是,使用JSP表达式标记工作正常.
这是我的相关代码:
<%
ResultRow row = (ResultRow)request.getAttribute(WebKeys.SEARCH_CONTAINER_RESULT_ROW);
Course course = (Course) row.getObject();
long groupId = themeDisplay.getLayout().getGroupId();
String name = Course.class.getName();
String primaryKey = String.valueOf(course.getPrimaryKey());
%>
<liferay-ui:icon-menu>
<c:if test="<%= permissionChecker.hasPermission(groupId, name, primaryKey, ActionKeys.UPDATE)%>">
<portlet:actionURL name="editCourse" var="editURL">
<portlet:param name="resourcePrimaryKey" value="${primaryKey}"/>
</portlet:actionURL>
<liferay-ui:icon image="edit" message="Edit" url="${editURL}" />
</c:if>
</liferay-ui:icon-menu>
Run Code Online (Sandbox Code Playgroud)
如您所见,在<portlet:param>标记中,我使用EL来传递值属性.但它不工作,我得到的价值作为0对"resourcePrimaryKey"我的操作方法,当我这样做:
long courseId = ParamUtil.getLong(request, "resourcePrimaryKey");
// courseId is 0 here
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用JSP表达式标签代替EL,它可以正常工作:
<portlet:actionURL name="editCourse" var="editURL">
<portlet:param name="resourcePrimaryKey" value="<%= primaryKey %>"/>
</portlet:actionURL>
Run Code Online (Sandbox Code Playgroud)
现在,我得到了所需的值"resourcePrimaryKey". …
我有一个简单的方法接受我的liferay portlet中的PortletResponse和PortletRequest
public void remove(PortletResponse response, PortletRequest request) {
}
Run Code Online (Sandbox Code Playgroud)
我想将响应状态设置为404,就像我可以用HttpServletResponse做的那样 httpResponse.sendError(HttpServletResponse.SC_BAD_REQUEST)
你能告诉我怎么做吗?
我非常困惑何时使用什么,以及使用这些参数的优点和缺点是什么。
谁能帮我澄清一下吗?
我正在学习如何在 Liferay 7 CE GA 3 门户平台上创建 portlet。
为此,我按照 liferay 站点中给出的教程,使用 maven、gradle 创建了一些测试 portlet。
但现在,我需要从服务器中删除这些 portlet。每当我启动 Liferay 捆绑包中提供的 tomcat 服务器时,那些先前部署的 portlet 就会出现在网页上。我已经尝试过,但找不到部署在tomcat内部的war文件,无法删除它们。
我尝试删除 liferay 工作目录中的 portlet 文件夹并清除临时目录,但这没有帮助。
PS:我通过将 war 文件复制到 liferay 包的“部署”目录来手动部署 portlet。