Primefaces de la liste de choix de la cible et la source des valeurs ne changent pas
Mon primefaces de liste de sélection de la source et de la cible les valeurs ne changent pas, j'ai suivi l'exemple de primefaces vitrine
et on a également examiné plusieurs posts ici, mais ne suis toujours pas en mesure de résoudre le problème. Je suis l'aide d'une liste à partir de la base de données pour remplir la source comme suit:
private DualListModel<Course> courseModel;
public CourseBean() {
List<Course> target = new ArrayList<Course>();
List<Course> source = new ArrayList<Course>();
courseModel = new DualListModel<Course>(source, target);
}
...
//this DualListModel getter also populates the source with values from db
public DualListModel<Course> getCourseModel() {
courseModel.setSource(getCourseList());
return courseModel;
}
Mon convertisseur est
import org.omnifaces.converter.SelectItemsConverter;
@FacesConverter("courseConverter")
public class CourseConverter extends SelectItemsConverter {
@Override
public String getAsString(FacesContext context, UIComponent component,
Object value) {
Integer id = (value instanceof Course) ? ((Course) value).getId()
: null;
return (id != null) ? String.valueOf(id) : null;
}
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String value) {
Course course = new Course();
course.setId(Integer.parseInt(value));
return course;
}
}
et enfin ma page xhtml est:
<h:form>
<p:pickList id="coursesOffered"
value="#{courseView.courseModel}" var="course"
itemValue="#{course}" itemLabel="#{course.courseTitle}"
converter="courseConverter" showSourceFilter="true"
showTargetFilter="true" filterMatchMode="contains">
<f:facet name="targetCaption">Selected</f:facet>
<f:facet name="sourceCaption">All Courses</f:facet>
<p:ajax event="transfer" listener="#{courseView.onTransfer}" />
<p:column style="width:10%">
#{course.courseCode}:
</p:column>
<p:column style="width:90%">
#{course.courseTitle}
</p:column>
</p:pickList>
<p:commandButton id="pojoSubmit" value="Submit"
update="displayPlayers" oncomplete="playerDialog.show()"
style="margin-top:5px" />
<p:dialog showEffect="fade" hideEffect="fade" widgetVar="playerDialog">
<h:panelGrid id="displayPlayers" columns="2">
<h:outputText value="Source: " style="font-weight:bold" />
<ui:repeat value="#{courseView.courseModel.source}"
var="course">
<h:outputText value="#{course.courseTitle}"
style="margin-right:5px" />
</ui:repeat>
<h:outputText value="Target: " style="font-weight:bold" />
<ui:repeat value="#{courseView.courseModel.target}"
var="course">
<h:outputText value="#{course.courseTitle}"
style="margin-right:5px" />
</ui:repeat>
</h:panelGrid>
</p:dialog>
</h:form>
La liste de choix s'affiche correctement avec source rempli avec les valeurs de la base de données, mais, en cliquant sur le bouton, la boîte de dialogue affiche la source d'origine de la liste de valeurs et d'un vide de la liste des cibles, même après le transfert d'articles sur l'interface. Ce qui me manque?
SelectItemsConverter
. Vous ne devriez pas être majeur getAsObject()
à tous.OriginalL'auteur Silverfish | 2012-12-01
Vous devez vous connecter pour publier un commentaire.
Je vois quelques problèmes avec votre code. Dans la lecture, vous êtes à la reconstruction de la DualList à partir de la base de données, mettre à zéro tous les changements que vous avez fait jusqu'à présent.
essayer de vous faire getter quelque chose comme ceci:
Construire et de charger votre liste à partir de la base de données dans une méthode annotée @PostConstruct plutôt que dans le constructeur+getter.
Également d'annoter vos haricots @ViewScoped, si vous n'avez pas la construction d'un nouveau bean avec cible vide-liste à chaque requête
Enfin, vous avez également besoin d'un setter:
Je n'ai pas vraiment regardé dans le convertisseur, quand j'ai fait une liste de choix lasttime j'ai pris le convertisseur inclus dans primefaces vitrine (Jamais essayé le omnifaces). Voici un lien vers la source: http://code.google.com/p/ind/source/browse/indicadorCensoJSF/src/ve/gob/ine/censo/beans/convert/PrimeFacesPickListConverter.java?spec=svn154&r=154
Dans votre méthode
init()
, vous avez oublié de définir la méthode de type de retour devoid
, ce n'est pas un constructeur.OriginalL'auteur Aksel Willgert
Complémentaires pour la accepté de répondre, j'ai eu un problème avec le Omnifaces liste de convertisseur. Tout a fonctionné, sauf que le déjà repris les éléments n'ont pas été mis à jour et "perdu", c'est qu'ils étaient là, dans la vue, mais les seuls éléments traités ont été choisis dans la vue, ne sont pas ceux qui ont déjà été définie comme cibles dans le haricot, ainsi, au lieu d'avoir une liste des cibles avec les articles ramassés plus ceux qu'ils étaient au dualList constructeur, la liste des cibles venait de celles cueillies à la vue, et non définie au préalable les éléments.
Comme une solution, j'ai aussi mis en œuvre un custom de la liste de choix convertisseur pour les composants primefaces. Maintenant, tout fonctionne comme un charme.
Je ne suis pas répondre précisément à la question, car il a accepté de répondre à déjà (et je n'ai pas les points pour faire un commentaire). Je suis juste en complément, comme certaines personnes peuvent avoir des problèmes à l'aide de primefaces 2.3 et omnifaces 3.1. J'ai fait une recherche beaucoup sur le problème que j'ai en face, et n'a pas trouvé au moins un soupçon de ce qui se passait.
Ce site: exemple de liste de choix a un tutoriel sur la façon de rendre le convertisseur, si quelqu'un a des doutes. ACV, la réponse est aussi valable pour le convertisseur, bien qu'il était déjà mis en œuvre par Les poissons d'argent, qui a posé la question.
OriginalL'auteur Lúcio José Beirão
De travailler avec des objets, vous avez besoin d'un convertisseur. C'est la réponse la meilleure façon de la mettre en œuvre: https://stackoverflow.com/a/6625392/912829
OriginalL'auteur ACV