ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – Liferay:如何从JSP页面调用Servlet

2019-07-16 21:02:30  阅读:270  来源: 互联网

标签:java servlets liferay portlet liferay-6


这是我的第一个Portlet.我没有在servlet中获取值.请看节目.在我的自定义portlet Java类doView()方法中,我展示了一个JSP页面

public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {            
    include(viewJSP, renderRequest, renderResponse);
}

在view.jsp页面中,我引用一个servlet来接收值:

<form action="formServlet" method="post">
    <h1>Please Login</h1>
    Login:    <input type="text" name="login"><br>
    Password: <input type="password" name="password"><br>
    <input type=submit value="Login">
</form>

在web.xml文件中:

<servlet>
    <servlet-name>formServlet</servlet-name>
    <servlet-class>FormServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>formServlet</servlet-name>
    <url-pattern>formServlet</url-pattern>
</servlet-mapping>

在我的servlet里面

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {  
    String name = (String)request.getParameter("login");
    System.out.println("The Name is "+name);    
}

但我不知道为什么没有调用servlet.

解决方法:

注意:这是一个有点复杂问题的答案.如果您正在尝试学习portlet创建的基础知识,我在另一个问题中发布了better answer.

您正在使用POST method提交表单,但您的servlet只是实现了为GET方法提供的doGet().您应该使用GET提交表单或实现doPost()方法(在其他情况下这将是更好的选择).

此外,有必要在< url-pattern>之前.如果它是绝对模式,则以斜线表示内容.也就是说,它应该是

<url-pattern>/formServlet</url-pattern>

代替

<url-pattern>formServlet</url-pattern>

那就是说,现在忘了servlets了!

你是以最糟糕的方式之一做到的.编写一个调用servlet的portlet真是个坏主意.经过很长一段时间与Liferay合作,我可以想象它或多或少会合理的情况,但它不在这里,也不会在大多数时候.

那你该怎么办?您应该将表单提交到操作URL.要做到这一点,首先在JSP中包含portlet taglib:

<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>

现在,用< portlet:actionURL />替换表单的操作.此标记将替换为门户网站生成的特殊URL.此外,在每个输入名称前面加上标记< portlet:namespace /&gt ;;你的< input type =“text”name =“login”>应该成为< input type =“text”name =“< portlet:namespace /> login”>然后.此标记将替换为仅与您的portlet关联的字符串;因为页面中可以有很多portlet,所以每个输入都应该指定它来自哪个portlet.这是最终结果:

<form action="<portlet:actionURL />" method="post">
    <h1>Please Login</h1>
    Login:    <input type="text" name="<portlet:namespace />login"><br>
    Password: <input type="password" name="<portlet:namespace />password"><br>
    <input type=submit value="Login">
</form>

现在您要正确提交数据 – 但如何获取提交的数据?当然没有必要使用servlet!而是向您的自定义portlet类添加一个名为processAction()的方法.此方法应返回void并接收两个参数,即javax.portlet.ActionRequest和javax.portlet.ActionResponse.这是一个空的processAction()示例:

public void processAction(ActionRequest request, ActionResponse response) {
    // Nothing to be done for now.
}

当对操作URL的请求(由< portlet:actionURL />生成的请求)发送到服务器时,首先由processAction()方法处理,然后由doView()处理.因此,您在servlet中编写的代码应该放在processAction()中.结果应该是:

public void processAction(ActionRequest request, ActionResponse response) {
    String name = (String)request.getParameter("login");
    System.out.println("The Name is "+name);
}

尝试一下,你会发现它会很好用.

标签:java,servlets,liferay,portlet,liferay-6
来源: https://codeday.me/bug/20190716/1481740.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有