0

JSONとAjaxを使用して2つのアプリケーション間でデータを送信したいと思います。最初のテストでは、ボタン(xhtml)をクリックして、managedbean(2番目のアプリケーション)でデータを受信します。

このために、私は作成しました:

xhtmlページ:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui">
    <body>
        <ui:composition template="/templates/template.xhtml">
            <ui:define name="content">
                <h:outputScript library="js" name="test.js" />
                <h:form>
                <h:button  onclick="validate();" value="Tester" type="button"/> 
                </h:form>
            </ui:define>
        </ui:composition>
    </body>
    </html>

test.js:

function validate(){ 
    try{
        var myJSONObject = {"name":"hello","address":"xyz"};
        var toServer = "data=" + encodeURIComponent(myJSONObject);
        var request=new XMLHttpRequest();
        request.open("POST", "http://'xxLocalIPxx':8080/Project1/folderTest/TestBean", true);
        request.send(toServer);
        return true;
    }
    catch(err)
    {
    alert(err.message);
    }
};

ManagedBean TestBean:

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

    public TestBean() {
        super();
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // PrintWriter out = response.getWriter();
        String output = request.getParameter("params");
        System.out.println("Servlet : " + output);
    }
}

しかし、xhtmlページのボタンをクリックしても、managedBeanでメソッドdoGetを実行しません。このメソッドにブレークポイントを設定しようとしましたが、機能しません。

なんで ?

ありがとう。

4

1 に答える 1

3

サーブレットJSFバッキングBeanを混在させています。彼らはお互いに何の関係もありません。TestBeanあなたが持っているクラスは本質的にサーブレットであり、JSFバッキングBeanではありません。@ManagedBeanクラスまたは<managed-bean>でJSFマネージドBeanとして登録して使用することはできませんfaces-config.xml。完全なサーブレットとして登録する必要があります。このために、クラスまたはのエントリの@WebServletアノテーションを使用できます。<servlet>web.xml

ご使用の環境がサーブレット3.0をサポートしていると仮定して、@WebServletそれを登録するために使用します。

@WebServlet("/testservlet")
public class TestServlet extends HttpServlet {
    // ...
}

(ここで/testservlet、はサーブレットがリッスンする必要のあるURLパターンです)

そして、それがコンテキストパスであると仮定して/Project1、次のように呼び出します。

http://example.com:8080/Project1/testservlet

(最初にブラウザのアドレスバーにURLを直接入力してテストすると、簡単になります)

参照:

于 2012-09-26T15:22:20.190 に答える