JSF 2.0 ne peut pas afficher de boîte de dialogue à partir de primefaces
Dernièrement, je vais avoir beaucoup de problèmes avec les composants primefaces, je dot savoir pourquoi. J'utilise glassfishV3.0 et mon primefaces version 2.2.1
Mon problème maintenant est que je ne peux pas faire la p:boîte de dialogue de primefaces rendu quand je clique sur une ligne du tableau. Je ne almos exactement comme il est fait dans l'exemple: http://www.primefaces.org/showcase/ui/datatableComplex.jsf
Je pense que ma question a quelque chose à faire avec un peu de configuration, car je suis aussi à avoir des problèmes avec d'autres composants primefaces. Quelqu'un peut-il me donner un coup de main s'il vous plaît et dites-moi ce que je suis manquant pour pouvoir utiliser des composants primefaces comme thisone avec pas de problèmes?
Voici le code:
LE JSF:
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:t="http://myfaces.apache.org/tomahawk"
xmlns:p="http://primefaces.prime.com.tr/ui">
<ui:composition template="WEB-INF/templates/BasicTemplate.xhtml">
<ui:define name="resultsForm">
<h:form enctype="multipart/form-data">
<h:inputText id="search" value="" /><h:commandButton value="search"/>
<p:dataTable var="garbage" value="#{resultsController.allGarbage}" dynamic="true" paginator="true" paginatorPosition="bottom" rows="10"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15" selection="#{resultsController.garbage}" selectionMode="single"
onRowSelectUpdate="display" onRowSelectComplete="fileDialog.show()">
<p:column sortBy="#{garbage.filename}" parser="string" filterBy="#{garbage.filename}" filterMatchMode="startsWith">
<f:facet name="header">
<h:outputText value="Filename" />
</f:facet>
<h:outputText value="#{garbage.filename}" />
</p:column>
<p:column filterBy="#{garbage.description}" filterMatchMode="contains">
<f:facet name="header">
<h:outputText value="Description" />
</f:facet>
<h:outputText value="#{garbage.description}" />
</p:column>
<p:column sortBy="#{garbage.uploadDate}" parser="string">
<f:facet name="header">
<h:outputText value="Upload date" />
</f:facet>
<h:outputText value="#{garbage.uploadDate}" />
</p:column>
</p:dataTable>
<p:dialog header="Modal Dialog" widgetVar="fileDialog" modal="true" height="200">
<h:panelGrid id="display" columns="2" cellpadding="4">
<h:outputText value="FileName:" />
<h:outputText value="#{garbage.filename}" />
<h:outputText value="Upload date:" />
<h:outputText value="#{garbage.uploadDate}" />
<h:outputText value="Description" />
<h:outputText value="#{garbage.description}" />
</h:panelGrid>
</p:dialog>
</h:form>
</ui:define>
</ui:composition>
</html>
LE Managed bean
@ManagedBean
@ViewScoped
public class ResultsController implements Serializable{
@EJB
private ISearchEJB searchEJB;
private Garbage garbage;
public List<Garbage> getAllGarbage() {
List<Garbage> tmpGarbage = new ArrayList<Garbage>();
for(Garbage g :searchEJB.findAllGarbage()) {
tmpGarbage.add(g);
}
return tmpGarbage;
}
public Garbage getGarbage() {
return garbage;
}
public void setGarbage(Garbage garbage) {
this.garbage = garbage;
}
La JSF avant est un composite de page que j'utilise à l'intérieur de ce modèle
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>title</title>
<script type="text/javascript">
PrimeFaces.widget.Uploader.prototype._createPostParams = function() {
var b = {};
b[PrimeFaces.PARTIAL_REQUEST_PARAM] = true;
b[PrimeFaces.PARTIAL_PROCESS_PARAM] = this.id;
b[PrimeFaces.PARTIAL_SOURCE_PARAM] = this.id;
b[PrimeFaces.VIEW_STATE] = PrimeFaces.ajax.AjaxUtils.encodeViewState();
if (this.cfg.update) {
b[PrimeFaces.PARTIAL_UPDATE_PARAM] = this.cfg.update
}
var a = PrimeFaces.getCookie("JSESSIONID");
if (this.cfg.script.indexOf("jsessionid") == -1) {
paramIndex = this.cfg.script.indexOf('?');
if (paramIndex != -1) {
this.cfg.script = this.cfg.script.substring(0, paramIndex)
+ ";jsessionid=" + a
+ this.cfg.script.substring(paramIndex);
} else {
this.cfg.script = this.cfg.script + ";jsessionid=" + a;
}
}
b['cid'] = "#{javax.enterprise.context.conversation.id}";
return b;
};
PrimeFaces.widget.Uploader.prototype.createPostParams = PrimeFaces.widget.Uploader.prototype._createPostParams;
</script>
<script type="text/javascript" src="/primefaces_resource/2.1/yui/datasource/datasource-min.js"></script>
<script type="text/javascript" src="/primefaces_resource/2.1/primefaces/paginator/paginator.js"></script>
<script type="text/javascript" src="/primefaces_resource/2.1/yui/datatable/datatable-min.js"></script>
<script type="text/javascript" src="/primefaces_resource/2.1/primefaces/datatable/datatable.js"></script>
<script type="text/javascript" src="/primefaces_resource/2.1/yui/swf/swf-min.js"></script>
<script type="text/javascript" src="/primefaces_resource/2.1/yui/charts/charts-min.js"></script>
<script type="text/javascript" src="/primefaces_resource/2.1/primefaces/charts/charts.js"></script>
</h:head>
<body>
<ui:insert name="resultsForm"/>
</body>
</html>
Mon web.xml configuration
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/pages/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>pages/index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Resource Servlet</servlet-name>
<servlet-class>org.primefaces.resource.ResourceServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Resource Servlet</servlet-name>
<url-pattern>/primefaces_resource/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
Dans le tableau i ci-dessus everithing, tout le sortBy de la fonction et de la p:dialogue ne marche pas.
C'est un message qui s'affiche à l'éclipse de la console lorsque j'actualise la page:
SÉVÈRE: ligne 1:61 aucune alternative viable au caractère ';'
Je ne comprends pas ce que cela veut dire, je pense que j'ai une sorte de problème de configuration plutôt que d'une erreur de syntaxe. Mal être vraiment heureux si quelqu'un pouvait m'aider à résoudre ce s'il vous plaît.
Oui, je peux appeler la boîte de dialogue de l'extérieur de la table avec un bouton comme ceci: <p:commandButton value="Test" onclick="fileDialog.show();" type="bouton"/> Ça marche, mais ce qui est mal, pourquoi il ne fonctionne quand je clique sur une ligne de la table?
Essayez d'ajouter un rowSelectListener et vérifier si elle est appelée.
Non, il ne fonctionne pas, j'ai essayé ceci: rowSelectListener="#{fileDialog.show()}" Sont peut-être certaines des autres options inquiétant?: sélection="#{resultsController.poubelle}" selectionMode="simple" mise à jour="afficher" rowSelectListener="#{fileDialog.show()}"
Essayez de mettre la
p:dialog
à l'extérieur de la h:form
de votre "p:dataTable" et de voir si le fixer? Si non je vais essayer de recréer votre problème sur mon ordinateurOriginalL'auteur sfrj | 2011-03-30
Vous devez vous connecter pour publier un commentaire.
... uhmmm je créer une version simplifiée de votre code et le mien fonctionne parfaitement. Chaque fois que je clique sur la ligne, ma boîte de dialogue pop-up. Essayez d'exécuter ce code sur un nouveau projet et de voir si cela a fonctionné.
et voici mon haricot
mise à Jour par sfrj
Comme vous le voyez plus que l'une de mes lignes sont de couleur jaune, qui n'est pas suposed à être comme ça. selectionMode="unique" ne fonctionne pas correctement.
Mise à jour par Harry
Voici comment convertir une Date en Chaîne de
Alors votre JSF serait comme cette
mise à Jour 2 par sfrj
Ici est la nouvelle marque JSF page:
J'ai juste essayé ceci: public void onRowSelect(SelectEvent event){ ordures = (Ordures ménagères)de l'événement.getObject();} sur mon managed bean et je l'ai appelé comme ceci: rowSelectListener="#{resultsController.onRowSelect}", Mais ne semble pas fonctionner 🙁
Ce n'est pas une bonne idée de continuer de battre sur quelque chose qui ne fonctionne pas. Ce que je veux vous faire est ceci: maintenant, vous savez que mon exemple de travail, de sorte que nous allons commencer à partir de là. À partir de mon code, commencer à mettre vos composants (un composant à la fois tout de même). Chaque fois que vous placez un composant, de redéployer et de voir si la boîte de dialogue affichée. De cette façon, nous pouvons cerner le problème, dans le temps de le dire, je vais essayer de prendre un coup d'oeil à votre nouveau code.
Vous avez raison c'est ce que je vais faire Demain matin. Je vais créer une nouvelle page et de commencer à ajouter, morceau par morceau. Aussi j'allais faire une mise à jour sur votre post pour vous montrer une impression d'écran de comparer les deux. J'ai aussi remarqué que dans la mienne, pour une raison quelconque, l'option selectionMode="unique" comme dirait ne marche pas. Voir la mise à jour. En tout cas merci beaucoup j'espère que demain matin, j'ai plus de chance 🙂
j'ai remarqué sur p:colonne, vous avez un
parser="string"
. Je ne pense pas que p:colonne ont cet attribut.OriginalL'auteur Thang Pham