2013-12-09 5 views
0

Я здесь, потому что у меня возникла очень странная проблема в моем приложении, которая заключается в следующем: у меня есть приложение электронной коммерции с JSF и EJB, и я пытаюсь заполнить форма с информацией пользователя. Проблема в том, что моя форма не отображается хорошо, когда есть зарегистрированный пользователь, и когда я не зарегистрирован, он отображается очень хорошо: O Я использую управляемый компонент (MB) для обработки, и он хранит объект учетной записи, представляющий учетная запись пользователя. Я использую jsf composite для создания моей формы и шаблонов для страниц xhtml.PrimeFaces inputText не отображается иногда

Кроме того, я получил эти предупреждения от GlassFish:

  • ВНИМАНИЕ: Не удалось найти компонент с идентификатором ПгвЬЫатом в поле зрения.
  • ВНИМАНИЕ: Не удается найти компонент с идентификатором lastName.
  • ВНИМАНИЕ: Невозможно найти компонент с улицей ID.
  • ВНИМАНИЕ: Невозможно найти компонент с идентификатором почтового кода в поле зрения.
  • ПРЕДУПРЕЖДЕНИЕ. Невозможно найти компонент с городом-кандидатом.

Потому что они не визуализированы, я проверил его с помощью firebug.

Вот мой XHTML код страницы (/Form.xhtml доступны пользователю):

<ui:composition template="template/common/commonLayout.xhtml" 
       xmlns="http://www.w3.org/1999/xhtml" 
       xmlns:ui="http://java.sun.com/jsf/facelets" 
       xmlns:component="http://java.sun.com/jsf/composite/component"> 
    <ui:define name="title">Formulaire</ui:define> 

    <ui:define name="content"> 
     <ui:fragment rendered="#{dataManagedBean.connected}"> 
      <component:FormValidateCartComponent title="Valider mon panier" first_name="yann" /> 
     </ui:fragment> 
     <ui:fragment rendered="#{not dataManagedBean.connected}"> 
      <component:FormValidateCartComponent title="Valider mon panier" first_name="NoName" /> 
     </ui:fragment> 
    </ui:define> 
</ui:composition> 

Вот моя форма компонент:

<?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:h="http://java.sun.com/jsf/html" 
     xmlns:composite="http://java.sun.com/jsf/composite" 
     xmlns:p="http://primefaces.org/ui" 
     xmlns:ui="http://java.sun.com/jsf/facelets"> 
    <composite:interface> 
     <composite:attribute name="title" /> 
     <composite:attribute name="first_name"/> 
     <!--ajouter des attributs pour le cas ou l'utilisateur est connecté --> 
    </composite:interface> 
    <composite:implementation> 
     <h:form id="form" class="span5 offset4"> 
      <h2>#{cc.attrs.title}</h2> 
      <p:panel header="Adresse de Livraison"> 
       <h:panelGrid id="gridpanel" columns="2" style="margin-bottom:10px"> 
        <h:outputLabel for="firstName" value="Prenom : " /> 
        <p:inputText id="firstName" value="#{cc.attrs.first_name}" binding="#{firstName}"/> 
        <h:outputLabel for="lastName" value="Nom : " /> 
        <p:inputText id="lastName" binding="#{lastName}"/> 
        <h:outputLabel for="street" value="Rue : " /> 
        <p:inputText id="street" binding="#{street}" /> 
        <h:outputLabel for="postalCode" value="Code Postale : " /> 
        <p:inputText id="postalCode" binding="#{postalCode}" /> 
        <h:outputLabel for="city" value="Ville : "/> 
        <p:inputText id="city" binding="#{city}"/> 
        <h:outputLabel for="pbutton"/> 
        <h:commandButton id="pbutton" class="paypal-button" 
            action="Cart.xhtml" 
            actionListener="#{dataManagedBean.creatOrder(firstName.value,lastName.value,street.value,postalCode.value,city.value)}" /> 
       </h:panelGrid> 
      </p:panel> 
      <ui:fragment rendered="#{!dataManagedBean.connected}"> 
       <p:panel header="Connexion"> 
        <h:panelGrid id="grid" columns="2" style="margin-bottom:10px"> 
         <h:outputLabel for="login" value="Login : "/> 
         <p:inputText id="login" binding="#{login}" /> 
         <h:outputLabel for="password" value="Mot de passe : "/> 
         <p:inputText id="password" binding="#{password}" /> 
         <h:outputLabel for="accountCreationButton"/> 
         <h:commandButton id="accountCreationButton" value="Créer un compte" action="Cart.xhtml" actionListener="#{dataManagedBean.createAccount(login.value,password.value,dataManagedBean.creatOrder(firstName.value,lastName.value,street.value,postalCode.value,city.value))}"/> 
        </h:panelGrid> 
       </p:panel> 
      </ui:fragment> 
     </h:form> 
    </composite:implementation> 
</html> 

На данный момент я просто пытаюсь установите first_name, но, как сказано ранее, когда я зарегистрирован, каждый входной текст отсутствует в html-рендере. Как это возможно ? Когда я отключусь и получаю доступ к форме, все в порядке ... Спасибо за помощь, я действительно не знаю, почему это происходит ... Мои функции подключения и отключения просто получают по JPA запрос учетной записи с логином и паролем и отключением просто установив учетную запись в null в управляемом компоненте.

EDIT: Используя c: если мои проблемы решены! Почему, я не знаю ... Дайте мне знать, если у вас есть ключ :)

Managed Bean частичный код:

public void connect(String login, String password) { 
     account = client.connect(login, password); 
    } 

    public String disconnect() { 
     if (account != null) { 
      account = null; 
     } 
     return "index.xhtml?faces-redirect=true"; 
    } 

    public boolean isConnected() { 
     return account != null; 
    } 

ответ

0

фрагмент UI вызывает некоторые проблемы с точки зрения контекстными и некоторые свойства, я sugest просто измените ui: frament с помощью ah: panelGroup, если вы просто поместите визуализированный атрибут JSF не будет генерировать span или div, просто отобразит или не будет внутреннее содержимое Отредактировано: Похоже, что balusC говорит, ui: fagment не будет разрешите проблему, после быстрого чтения я не смог найти ошибку, какова область видимости, которую вы используете ?, это управляемый CDI компонент или старый компонент bean?

+0

Я тестировал с h: panelGroup, и проблема такая же ... Так что это не фрагмент UI, но я буду держать panelGroup :) – Ko2r

+1

'' является компонентом пользовательского интерфейса, а не обработчиком тегов. Симптомы, которые вы описываете, соответствуют только обработчикам меток, например '', '' и т. Д. (Эти * не * имеют атрибут «rendered»). Поэтому этот «ответ» вводит в заблуждение и вряд ли разрешит конкретную проблему. – BalusC

+0

Хорошо, тогда проверьте код примера и сообщите, найду ли я что-нибудь, и еще одно, помните, что если вы используете составные компоненты, JSF добавит идентификатор к каждому компоненту в составном компоненте, поэтому вы должны проверить это для предупреждения «unabled to find id», @balusc, извините, я не знал, что ui: fragment - это UiComponent, добавленный мне сейчас. – rekiem87