Предупреждение. Эта страница требует пространства имен XML http://www.facebook.com/2008/fbml, объявленного с префиксом fb, но для этого пространства имен не существует taglibrary
Я разрабатываю приложение для входа в FB с веб-сайтом с помощью Javascript. Я пробовал в html, он отлично работает. когда я конвертирую в JSF, он дает ошибку.
Это мой код fbLogin.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:fb="http://www.facebook.com/2008/fbml">
<h:head>
<title>FB Login</title>
<link rel="stylesheet" type="text/css" href="./xmlhttp/css/rime/rime.css"/>
</h:head>
<h:body styleClass="ice-skin-rime">
<fb:login-button scope="email"></fb:login-button>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '<APP_ID>',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
// Additional initialization code here
showMe = function(response) {
if (response.status !== 'connected') {
div.innerHTML = '<em>Not Connected</em>';
} else {
FB.api('/me', function(response) {
var i=0;
for (var key in response) {
i++;
switch(i){
case 1: document.getElementById("formId:id").value=response[key]; break;
case 2: document.getElementById("formId:name").value=response[key]; break;
case 5: document.getElementById("formId:link").value=response[key]; break;
case 6: document.getElementById("formId:userName").value=response[key]; break;
case 19: document.getElementById("formId:email").value=response[key]; break;
}
}
});
}
};
FB.getLoginStatus(function(response) {
showMe(response);
FB.Event.subscribe('auth.authResponseChange', showMe);
});
};
// Load the SDK Asynchronously
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document));
</script>
<h:form id="formId">
<table>
<tr><td><a>ID : <h:inputText id="id" value="#{fbLogin.id}" /> </a></td></tr>
<tr><td><a>Name : <h:inputText id="name" value="#{fbLogin.name}" /> </a></td></tr>
<tr><td><a>Link : <h:inputText id="link" value="#{fbLogin.link}" /> </a></td></tr>
<tr><td><a>User Name : <h:inputText id="userName" value="#{fbLogin.userName}" /> </a></td></tr>
<tr><td><a>E-Mail : <h:inputText id="email" value="#{fbLogin.email}" /> </a></td></tr>
<tr><td><h:commandButton value="Register" action="#{fbLogin.Display}" /></td></tr>
</table>
</h:form>
</h:body>
</html>
Причиной написания кода с JSF является то, что мне нужно получить информацию о пользователе в моем backBean для хранения в базе данных.
когда я пытаюсь запустить это приложение, я получил предупреждение в браузере как:
Warning: This page calls for XML namespace http://www.facebook.com/2008/fbml declared with prefix fb but no taglibrary exists for that namespace.
Какова ошибка в моем коде?
Ответы
Ответ 1
Вы получите это, когда вы установили javax.faces.PROJECT_STAGE
в Development
в webapp web.xml
, а Facelets - пространство имен XML, которое не удалось разрешить для библиотеки тегов, совместимых с JSF. Это предупреждение просто отображается, чтобы сообщить разработчику (начинающему) о возможной непредвиденной опечатке в пространстве имен XML или ошибке в конфигурации библиотеки тегов.
Однако рассматриваемое пространство имен XML в данном конкретном случае фактически ссылается на внешний API JavaScript Facebook, а не на библиотеку тегов JSF, такую как PrimeFaces, OmniFaces и т.д. Ваш код полностью в порядке.
Вы можете просто игнорировать это предупреждение. Это предупреждение не появится, если вы вернете этап проекта JSF на Production
или когда вы удалите весь контекстный параметр (по умолчанию он уже равен Production
).