Предупреждение: эта страница вызывает пространство имен XML http://www.facebook.com/2008/fbml, объявленное с префиксом fb, но нет библиотеки тегов для этого пространства имен

Я разрабатываю приложение для FB Login с веб-сайта, используя 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 в веб-приложении web.xml и Facelets обнаруживает пространство имен XML, которое не может быть преобразовано в библиотеку тегов, совместимую с JSF. Это предупреждение просто отображается, чтобы сообщить (начинающему) разработчику о возможной непредвиденной опечатке в пространстве имен XML или об ошибке в конфигурации библиотеки тегов.

Однако рассматриваемое пространство имен XML в данном конкретном случае фактически ссылается на внешний JavaScript API JavaScript, а не на библиотеку тегов JSF, такую ​​как PrimeFaces, OmniFaces и т. Д. Ваш код полностью в порядке.

Вы можете просто проигнорировать это предупреждение. Это предупреждение не появится, когда вы вернете стадию проекта JSF обратно Productionили когда вы удаляете весь контекстный параметр (по умолчанию Production уже).

Другие вопросы по тегам