-1

フォームからサーブレットを呼び出そうとしています。サーブレットを呼び出す Web アプリに xhtml がありますが、サーブレットからの応答が表示されません。送信ボタンを押すと、元の xhtml が表示されます。サーブレットの応答に別の方法を試しましたが、毎回同じ結果が得られます。

xhtml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:h="http://java.sun.com/jsf/html"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:ejstreegrid="https://unfccc.int/nais/ejstreegrid"
xmlns:grid="http://java.sun.com/jsf/composite/gridcomp"
xmlns:nais="http://java.sun.com/jsf/composite/naiscomp">
<body>
<ui:composition template="/templateForm.xhtml">
<ui:define name="title">Some title</ui:define>
<ui:param name="currentPage" value="somepage.xhtml" />
<ui:define name="body">
<h2>the name to be added</h2><br/><br/>
<form action="someServlet" method="post">
<input type="text" name="someName" />
<input type="submit" />
</form>
</ui:define>
</ui:composition>
</body> 
</html>

呼び出されている Web アプリのサーブレット:

package netgui.servlet;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class someServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

public someServlet() {
super();
}

protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException   {
processRequest(request, response);
}

protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}

private void processRequest(HttpServletRequest request,
HttpServletResponse response) throws IOException {

try {
response.getWriter().write("some response");
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
response.getWriter().println("Error: " + e.getMessage());
}}}

また、xhtml ファイルを呼び出している menu.xhtml もあります。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:ui="http://java.sun.com/jsf/facelets">

<body>
<script type="text/javascript">
$(document).ready(function() {
$("#btn").click(function() {
$("#upload").click(); 
return false; 
}); 
});
</script>   
<ui:composition>
<div id="navigation_bar">
<ul id="topbarleft">
<c:choose>                  
<c:when test="${currentPage=='somepage.xhtml'}">
<li><b>Other (Please Specify) Two</b></li>
</c:when>
<c:otherwise>
<li><h:outputLink value="somepage.jsf">
<h:outputText value="some page" />
</h:outputLink></li>
</c:otherwise>
</c:choose>
</ul>
</div>
</ui:composition>
</body>
</html>

何が間違っている可能性がありますか?フォームをjsfのサーブレットに送信するための特別なフォーマットはありますか? フェイスレットで?

4

1 に答える 1

0

問題は、フォームでサーブレットを呼び出しながら、フェイスレットでテンプレートを使用していたことです。

xmlns:ui="http://java.sun.com/jsf/facelets"

<ui:composition template="/templateForm.xhtml">

<form action="someServlet" method="post">

テンプレートには独自の h:form タグがあるため、別のフォームを追加してサーブレットを呼び出すと、許可されていないフォーム内にフォームが作成されます。それが、私のサーブレットが呼び出されなかった理由です。テンプレートから h:form タグを削除して修正し、サーブレットが呼び出されるようになりました。

于 2012-04-17T08:50:20.513 に答える