【发布时间】:2013-12-27 01:13:38
【问题描述】:
我来到这里是因为我在我的应用程序中遇到了一个非常奇怪的问题,如下所示:我有一个带有 JSF 和 EJB 的电子商务应用程序,我正在尝试用用户信息填写表格.问题是当有登录用户时我的表单显示不好,当我没有登录时,他显示得很好:O 我正在使用托管 bean (MB) 进行治疗,他正在存储一个帐户对象代表用户登录的帐户。我正在使用 jsf 复合来为 xhtml 页面创建表单和模板。
此外,我还收到了 glassfish 的这些警告:
- 警告:无法在视图中找到 ID 为 firstName 的组件。
- 警告:无法在视图中找到 ID 为 lastName 的组件。
- 警告:无法在视图中找到 ID 街道的组件。
- 警告:无法在视图中找到 ID 为 postalCode 的组件。
- 警告:在视图中找不到 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 渲染中的每个 inputText 都丢失了。这怎么可能 ?当我断开连接并访问表单时,一切正常...感谢您的帮助,我真的不知道为什么会发生这种情况...我的连接和断开连接功能只是通过 JPA 请求具有登录名和密码的帐户和断开连接是只需在托管 bean 中将帐户设置为 null。
编辑:通过使用 c:if 我的问题得到解决!为什么,我不知道......如果你有线索,请告诉我:)
托管 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;
}
【问题讨论】:
标签: jsf jsf-2 primefaces composite-component