2016-03-09 3 views
2

Я пытаюсь отправить сообщение с страницы facelet (.xhml) на веб-службу REST (Джерси). Я думаю, что можно было бы сделать в JavaScript/JQuery, если сервер будет иметь, скажемPost XML to jersey rest webservice

<?php header('Access-Control-Allow-Origin: *'); ?> 

Однако сервер, кажется, не имеют свойство, как это, и я не знаю, где изменить что config.

Я пробовал это;

var settings = { 
    "async": true, 
    "crossDomain": true, 
    "url": "example.com", 
    "method": "POST", 
    "headers": { 
    "content-type": "application/xml", 
    "cache-control": "no-cache" 
    }, 
"data": 
    "<consultation>\n \n\ 
    <consultationDescription>"+description+"</consultationDescription>\n \n\ 
    <customerName>"+fullName+"</customerName>\n \n\ 
    <customerPhone>"+phonenumber+"</customerPhone>\n \n\ 
    <endDateAndTime>"+endDateAndTime+"</endDateAndTime>\n \n\ 
    <startDateAndTime>"+startDateAndTime+"</startDateAndTime>\n\n\ 
    </consultation>", 
    contentType: "application/xml", 

$.ajax(settings).done(function (response) { 
    console.log(response); 
}); 

Но я получаю только ошибку перекрестного происхождения.

Должен ли я попытаться найти, где изменить происхождение на сервере, или я должен идти с другим подходом? Может быть, < h: form> и сообщение через javabean, например # {sendXML.someMethod} и т. Д., Но я не знаю, где найти синтаксис для этого. Я застрял с этой проблемой в течение некоторого времени и не могу найти хороший ответ. У вас, ребята, какой-нибудь идеал, что делать?

Пример: http://postimg.org/image/5k2thyl3p/

Нажмите зеленую клетку -> Написать сообщение (отправить) -> время книги на сервере. Обновить вид.

+0

Это чистая клиентская штука, а не JSF, javabeans или netbeans. Если вы хотите сделать это serveride, он по-прежнему не связан с jsf, поскольку он выполняется в «java» ... Так что сделайте выбор. – Kukeltje

+0

@Kukeltje Я новичок здесь и не очень хорош с тегами или термином еще , Виноват. – Henkolicious

+0

Нет проблем. Вы должны либо делать это со стороны клиента (javascript), либо делать это на стороне сервера в компоненте (java-код). Не пытайтесь сделать это из самих макетов, взломав тег формы или что-то еще ... – Kukeltje

ответ

0

Так что я понял, как это сделать, следуя этого руководства: http://www.mkyong.com/java/how-to-send-http-request-getpost-in-java/

private final String USER_AGENT = "Mozilla/5.0"; 

// HTTP POST request 
private void sendPost() throws Exception { 
try { 
    String url = "http://myurl"; 
    URL obj = new URL(url); 
    HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 

    //add reuqest header 
    con.setRequestMethod("POST"); 
    con.setRequestProperty("Accept-Language", "UTF-8"); 
    con.setRequestProperty("content-type", "application/xml"); 

    String urlParameters = "<myXML></myXML>"; 

    // Send post request 
    con.setDoOutput(true); 
    DataOutputStream wr = new DataOutputStream(con.getOutputStream()); 
    wr.writeBytes(urlParameters); 
    wr.flush(); 
    wr.close(); 
catch (Exception e) { 
    e.printStackTrace(); 
} 
} 

Так как JavaScript не работает из-за ошибки Cross Domain, делая работу в бина работал просто отлично.

Я изменил пример кода путем модификации Http с URLConnection к HttpURLConnection и добавил con.setRequestProperty ("Content-Type", "приложения/XML").

Я также обернул стакан попыткой/уловом.

Я, вероятно, с самого начала не задал свой вопрос. Но, выполняя операции в фасоли, это работало для меня.

Смежные вопросы