2013-12-09 57 views
0

我来这里是因为我在我的应用程序中遇到了一个非常奇怪的问题,它是以下几点:我有一个使用JSF和EJB的电子商务应用程序,我试图填写一个包含用户信息的表单。问题是我的表单不能很好地显示,当有记录的用户,当我没有记录时,他显示得非常好:O我使用托管bean(MB)进行处理,并且他存储了一个表示帐户对象用户登录帐户。我使用jsf复合为xhtml页面创建我的表单和模板。PrimeFaces inputText有时候不会渲染

另外我从GlassFish中有这些警告:

  • 警告:无法鉴于找到与组件的firstName ID。
  • 警告:无法在视图中查找ID为姓氏的组件。
  • 警告:无法在视图中查找具有ID街道的组件。
  • 警告:无法在视图中查找ID为postalCode的组件。
  • 警告:无法查看ID城市的组件。

因为它们没有渲染,我用萤火虫检查过它。

这里是我的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,但像之前说的,当我记录每个inputText在HTML呈现中丢失。这怎么可能 ?当我断开连接并访问表单一切正常...感谢您的帮助我真的不知道为什么会发生这种情况......我的连接和断开连接功能只是通过JPA请求登录名和密码的帐户,并断开连接只需在托管bean中将帐户设置为null即可。

编辑:通过使用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将不会生成跨度和div,只会呈现内部内容 编辑: 看起来像balusC说,ui:fagment不会解决问题,快速阅读后,我无法找到一个错误,你使用的范围是什么?它是一个CDI托管的bean或旧的面孔bean?

+0

我测试过h:panelGroup,问题是一样的...所以它不是UI片段,但我会保持panelGroup :) – Ko2r

+1

''是一个UI组件,而不是taghandler。您描述的症状仅与标记处理程序匹配,例如'',''等(这些*不具有“呈现”属性)。因此这个“答案”具有误导性,不太可能解决具体问题。 – BalusC

+0

好吧然后生病检查你的示例代码,并让我知道如果我找到了一些东西,还有一件事,请记住,如果你使用复合组件,JSF会为你的复合组件中的每个组件添加一个id,所以,你应该检查这个“无法找到id”警告,@balusc,对不起,我不知道ui:fragment是一个UiComponent,现在增加了我的知识。 – rekiem87