Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Liferay:如何从JSP页面调用Servlet_Java_Servlets_Liferay_Portlet_Liferay 6 - Fatal编程技术网

Java Liferay:如何从JSP页面调用Servlet

Java Liferay:如何从JSP页面调用Servlet,java,servlets,liferay,portlet,liferay-6,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, rende

这是我的第一个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>
在我的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创建的基础知识,我在另一个问题中发布了一个


您正在使用提交表单,但servlet只实现了服务于GET方法的
doGet()
。您应该使用GET提交表单,或者实现
doPost()
方法(在其他情况下更可取)

此外,如果内容是绝对模式,则必须在内容前面加斜杠。就是应该,

<url-pattern>/formServlet</url-pattern>
现在,将表单的
操作
替换为
。此标记将由门户生成的特殊URL替换。另外,在每个输入名称前面加上标签
;你的
应该变成
。该标记将被一个仅与您的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>
当向服务器发送对操作URL的请求(由
生成)时,首先由
processAction()
方法处理,然后由
doView()
处理。因此,您将在servlet中编写的代码应该放在
processAction()
中。结果应该是:

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

尝试一下,您会发现它会很好地工作。

yyy-以下是您评论的答案:

在JSP页面中,您需要为希望portlet执行的每个操作添加以下内容:

<portlet:actionURL var="addUserURL">
<portlet:param name="<%= ActionRequest.ACTION_NAME %>" value="addUser" />
</portlet:actionURL>

<form method="post" action="<%= addUserURL %>">
这回答了你的问题吗


另外,通常最好开始一个新问题,而不是添加评论。

非常感谢您宝贵的时间。请告诉我联系您的自定义Portlet类(假设它扩展了GenericPortlet或其子类),您需要将Portlet.xml中的值更改为自定义Portlet类的包和类名,例如com.mypackage.myCustomPortlet这在我的Portlet.xml文件com.test.GreetingPortlet中,在这个类中,我有几个方法,如adduser、deleteuser——等等,所以这是正确的??yyy,我在下面为这个注释添加了一个答案。
<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>
public void processAction(ActionRequest request, ActionResponse response) {
    // Nothing to be done for now.
}
public void processAction(ActionRequest request, ActionResponse response) {
    String name = (String)request.getParameter("login");
    System.out.println("The Name is "+name);
}
<portlet:actionURL var="addUserURL">
<portlet:param name="<%= ActionRequest.ACTION_NAME %>" value="addUser" />
</portlet:actionURL>

<form method="post" action="<%= addUserURL %>">
public void addUser (ActionRequest actionRequest, ActionResponse actionResponse) {}