powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF: selectManyCheckbox does not work
11 сообщений из 11, страница 1 из 1
JSF: selectManyCheckbox does not work
    #39439138
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
                        <p:row>
                            <p:column>
                                <h:outputText value="Categories:"/>
                            </p:column>
                            <p:column>
                                <p:selectManyCheckbox value="#{productView.selectedProduct.categories}">
                                    <f:selectItems
                                            value="#{productView.availableCategories}"
                                            collectionType="java.util.LinkedHashSet"
                                            var="category"
                                            itemLabel="#{category.name}"  />
                                </p:selectManyCheckbox>
                            </p:column>
                        </p:row>
                        <f:facet name="footer">
                            <p:row>
                                <p:column colspan="2" style="text-align: right">
                                    <p:commandButton type="ajax" actionListener="#{productView.saveAction}"
                                                     value="Save" icon="ui-icon-check" update="growl,productTable"/>
                                </p:column>
                            </p:row>
                        </f:facet>




Форма открывается (при этом чекбоксы пустые, если просатривать Product с "привязанными" Category)

Product

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
package com.mezoline.domain;

import com.mezoline.domain.interfaces.Identified;


import javax.faces.bean.ManagedBean;
import javax.persistence.*;
import javax.transaction.Transactional;
import java.math.BigDecimal;
import java.util.*;

/**
 * Created by Hett on 06.04.2017.
 * Store products data
 */

@Entity
@ManagedBean
@Transactional
public class Product implements Identified {

    @Id
    @GeneratedValue
    private Integer id;

    @Temporal(TemporalType.DATE)
    private Date created_at;

    @Temporal(TemporalType.DATE)
    private Date updated_at;

    private Boolean visible;

    private String name;

    private String description;

    private BigDecimal price;

    private Integer category_id;

    private Integer manufacturer_id;

    @ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
    @JoinTable(
            name = "product_category",
            joinColumns = @JoinColumn(name = "product_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(name = "category_id", referencedColumnName = "id")

    )
    private Collection<Category> categories = new LinkedHashSet<>();

    @ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
    @JoinTable(
            name = "product_manufacturer",
            joinColumns = @JoinColumn(name = "product_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(name = "manufacturer_id", referencedColumnName = "id")

    )
    private Collection<Manufacturer> manufacturers = new LinkedHashSet<>();

    public void addCategory(Category category) {
        ProductCategory productCategory = new ProductCategory();
        productCategory.setCategory_id(category.getId());
        productCategory.setProduct_id(getId());
        productCategory.setProduct(this);
        productCategory.setCategory(category);
        categories.add(category);
        category.getProducts().add(this);
    }

    public Integer getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public Integer getCategory_id() {
        return category_id;
    }

    public void setCategory(Category category) {
        category_id = category.getId();
        categories.add(category);
    }


    public void setManufacturer_id(Manufacturer manufacturer) {
        manufacturer_id = manufacturer.getId();
        manufacturers.add(manufacturer);
    }

    public Collection<Manufacturer> getManufacturers()
    {
        return manufacturers;
    }

    public Collection<Category> getCategories() {
        return categories;
    }

    public void setCategories(Collection<Category> categories) {
        this.categories = categories;
    }

    public Boolean getVisible() {
        return visible;
    }

    public void setVisible(Boolean visible) {
        this.visible = visible;
    }
}




@ManagedBean()
@ViewScoped
ProductView

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
    public Collection<Category> getAvailableCategories()
    {
        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
        CriteriaQuery<Category> criteriaQuery = criteriaBuilder.createQuery(Category.class);
        Root<Category> rootEntry = criteriaQuery.from(Category.class);
        CriteriaQuery<Category> all = criteriaQuery.select(rootEntry);
        TypedQuery<Category> allQuery = entityManager.createQuery(all);
        return allQuery.getResultList();
    }


При нажати на кнопку, описанную в начале в JSF, падает исключение:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
19:55:25,415 WARNING [javax.enterprise.resource.webcontainer.jsf.lifecycle] (default task-99) failed to lazily initialize a collection, could not initialize proxy - no Session: org.hibernate.LazyInitializationException: failed to lazily initialize a collection, could not initialize proxy - no Sessio
n
        at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:587)
        at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:204)
        at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:566)
        at org.hibernate.collection.internal.AbstractPersistentCollection.write(AbstractPersistentCollection.java:397)
        at org.hibernate.collection.internal.PersistentBag.add(PersistentBag.java:297)
        at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectManyValuesForModel(MenuRenderer.java:381)
        at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectManyValue(MenuRenderer.java:128)
        at com.sun.faces.renderkit.html_basic.MenuRenderer.getConvertedValue(MenuRenderer.java:314)
        at org.primefaces.component.selectmanycheckbox.SelectManyCheckboxRenderer.getConvertedValue(SelectManyCheckboxRenderer.java:48)
        at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1045)
        at javax.faces.component.UIInput.validate(UIInput.java:975)
        at javax.faces.component.UIInput.executeValidate(UIInput.java:1248)
        at javax.faces.component.UIInput.processValidators(UIInput.java:712)
        at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
        at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
        at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
        at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
        at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
        at org.primefaces.component.dialog.Dialog.processValidators(Dialog.java:423)
        at javax.faces.component.UIForm.processValidators(UIForm.java:253)
        at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
        at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
        at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1195)
        at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
        at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
        at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
        at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
        at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
        at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53)
        at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
        at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
        at io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59)
        at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
        at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
        at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
        at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
        at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
        at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
        at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
        at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
        at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
        at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
        at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
        at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
        at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

19:55:25,511 SEVERE [javax.enterprise.resource.webcontainer.jsf.context] (default task-99) org.hibernate.LazyInitializationException: failed to lazily initialize a collection, could not initialize proxy - no Session
        at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:587)
        at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:204)
        at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:566)
        at org.hibernate.collection.internal.AbstractPersistentCollection.write(AbstractPersistentCollection.java:397)
        at org.hibernate.collection.internal.PersistentBag.add(PersistentBag.java:297)
        at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectManyValuesForModel(MenuRenderer.java:381)
        at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectManyValue(MenuRenderer.java:128)
        at com.sun.faces.renderkit.html_basic.MenuRenderer.getConvertedValue(MenuRenderer.java:314)
        at org.primefaces.component.selectmanycheckbox.SelectManyCheckboxRenderer.getConvertedValue(SelectManyCheckboxRenderer.java:48)
        at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1045)
        at javax.faces.component.UIInput.validate(UIInput.java:975)
        at javax.faces.component.UIInput.executeValidate(UIInput.java:1248)
        at javax.faces.component.UIInput.processValidators(UIInput.java:712)
        at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
        at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
        at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
        at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
        at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
        at org.primefaces.component.dialog.Dialog.processValidators(Dialog.java:423)
        at javax.faces.component.UIForm.processValidators(UIForm.java:253)
        at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
        at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
        at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1195)
        at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
        at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
        at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
        at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
        at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
        at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53)
        at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
        at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
        at io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59)
        at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
        at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
        at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
        at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
        at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
        at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
        at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
        at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
        at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
        at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
        at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
        at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
        at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)



До saveAction даже не доходит, поэтому выкладывать думаю смысла нет.

ProductCategory


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
package com.mezoline.domain;

import com.mezoline.domain.key.ProductCategoryId;

import javax.persistence.*;
import javax.transaction.Transactional;

/**
 * Created by Hett on 06.04.2017.
 */

@Entity
@Table(name = "product_category")
@IdClass(ProductCategoryId.class)
@Transactional
public class ProductCategory {

    @Id
    private Integer product_id;

    @Id
    private Integer category_id;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "product_id", referencedColumnName = "id", insertable = false, updatable = false)
    private Product product;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "category_id", referencedColumnName = "id", insertable = false, updatable = false)
    private Category category;

    public Integer getProduct_id() {
        return product_id;
    }

    public void setProduct_id(Integer product_id) {
        this.product_id = product_id;
    }

    public Integer getCategory_id() {
        return category_id;
    }

    public void setCategory_id(Integer category_id) {
        this.category_id = category_id;
    }

    public Product getProduct() {
        return product;
    }

    public void setProduct(Product product) {
        this.product = product;
    }

    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        this.category = category;
    }
}



Уже пол часа гуглю, схожие проблемы вроде и есть на стековерфлоу, но приведенные там решения не помогают.
В частности в persistence.xml имеется:

Код: xml
1.
            <property name="hibernate.enable_lazy_load_no_trans" value="true"/>
...
Рейтинг: 0 / 0
JSF: selectManyCheckbox does not work
    #39439164
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так вроде заработало:


Код: xml
1.
2.
3.
4.
5.
6.
                                <p:selectManyCheckbox value="#{productView.selectedProduct.categories}">
                                    <f:selectItems
                                            value="#{productView.availableCategories}"
                                            var="category" itemLabel="#{category.name}"  />
                                    <f:attribute name="collectionType" value="java.util.LinkedHashMap" />
                                </p:selectManyCheckbox>
...
Рейтинг: 0 / 0
JSF: selectManyCheckbox does not work
    #39439177
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только не понимаю, что ему еще надо.
Вот так все работает как я ожидаю:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
            userTransaction.begin();
            Product product = entityManager.find(Product.class, 27);
            Category category = entityManager.find(Category.class, 1);

            Collection<Category> categories = new ArrayList<>();
            categories.add(category);
            product.setCategories(categories);
                        
            entityManager.merge(product);
            userTransaction.commit();





Код: plaintext
1.
2.
3.
00:01:09,517 INFO  [stdout] (default task-62) Hibernate: select category0_.id as id1_0_0_, category0_.description as descript2_0_0_, category0_.name as name3_0_0_ from Category category0_ where category0_.id=?
00:01:09,530 INFO  [stdout] (default task-62) Hibernate: delete from product_category where product_id=?
00:01:09,532 INFO  [stdout] (default task-62) Hibernate: insert into product_category (product_id, category_id) values (?, ?)


Но с чекбоксами не работает:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
00:03:11,888 INFO  [stdout] (default task-81) Hibernate: select product0_.id as id1_2_1_, product0_.category_id as category2_2_1_, product0_.created_at as created_3_2_1_, product0_.description as descript4_2_1_, product0_.manufacturer_id as manufact5_2_1_, product0_.name as name6_2_1_, product0_.pri
ce as price7_2_1_, product0_.updated_at as updated_8_2_1_, product0_.visible as visible9_2_1_, categories1_.product_id as product_2_3_3_, category2_.id as category1_3_3_, category2_.id as id1_0_0_, category2_.description as descript2_0_0_, category2_.name as name3_0_0_ from Product product0_ left ou
ter join product_category categories1_ on product0_.id=categories1_.product_id left outer join Category category2_ on categories1_.category_id=category2_.id where product0_.id=?
00:03:11,891 WARNING [javax.enterprise.resource.webcontainer.jsf.lifecycle] (default task-81) /admin/product/index.xhtml @132,117 actionListener="#{productView.saveAction}": javax.persistence.PersistenceException: org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [priv
ate int com.mezoline.domain.Category.id] by reflection for persistent property [com.mezoline.domain.Category#id] : 1:╩рЄхуюЁш   1: javax.el.ELException: /admin/product/index.xhtml @132,117 actionListener="#{productView.saveAction}": javax.persistence.PersistenceException: org.hibernate.property.acce
ss.spi.PropertyAccessException: Error accessing field [private int com.mezoline.domain.Category.id] by reflection for persistent property [com.mezoline.domain.Category#id] : 1:╩рЄхуюЁш   1
        at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:111)
        at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:147)
        at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
        at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814)
        at javax.faces.component.UICommand.broadcast(UICommand.java:300)
        at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
        at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
        at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
        at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
        at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
        at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
        at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
        at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53)
        at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
        at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
        at io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59)
        at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
        at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
        at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
        at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
        at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
        at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
        at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
        at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
        at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
        at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
        at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
        at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
        at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: javax.persistence.PersistenceException: org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [private int com.mezoline.domain.Category.id] by reflection for persistent property [com.mezoline.domain.Category#id] : 1:╩рЄхуюЁш   1
        at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:147)
        at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:155)
        at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:162)
        at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:907)
        at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:866)
        at org.hibernate.engine.spi.CascadingActions$6.cascade(CascadingActions.java:261)
        at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:391)
        at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:316)
        at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:155)
        at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:424)
        at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:356)
        at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:319)
        at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:155)
        at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:104)
        at org.hibernate.event.internal.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:461)
        at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:327)
        at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:170)
        at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:69)
        at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:874)
        at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:860)
        at org.jboss.as.jpa.container.AbstractEntityManager.merge(AbstractEntityManager.java:565)
        at com.mezoline.admin.view.ProductView.saveAction(ProductView.java:82)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.sun.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:181)
        at com.sun.el.parser.AstValue.invoke(AstValue.java:289)
        at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
        at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
        at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
        at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
        at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
        at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
        ... 50 more
Caused by: org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [private int com.mezoline.domain.Category.id] by reflection for persistent property [com.mezoline.domain.Category#id] : 1:╩рЄхуюЁш   1
        at org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:71)
        at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:230)
        at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4725)
        at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:148)
        at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:896)
        ... 80 more
Caused by: java.lang.IllegalArgumentException: Can not set int field com.mezoline.domain.Category.id to java.lang.String
        at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
        at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
        at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:58)
        at sun.reflect.UnsafeIntegerFieldAccessorImpl.getInt(UnsafeIntegerFieldAccessorImpl.java:56)
        at java.lang.reflect.Field.getInt(Field.java:574)
        at org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:58)
        ... 84 more

00:03:12,038 SEVERE [javax.enterprise.resource.webcontainer.jsf.context] (default task-81) javax.persistence.PersistenceException: org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [private int com.mezoline.domain.Category.id] by reflection for persistent property [com
.mezoline.domain.Category#id] : 1:╩рЄхуюЁш   1
        at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:147)
        at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:155)
        at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:162)
        at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:907)
        at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:866)
        at org.hibernate.engine.spi.CascadingActions$6.cascade(CascadingActions.java:261)
        at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:391)
        at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:316)
        at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:155)
        at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:424)
        at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:356)
        at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:319)
        at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:155)
        at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:104)
        at org.hibernate.event.internal.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:461)
        at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:327)
        at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:170)
        at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:69)
        at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:874)
        at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:860)
        at org.jboss.as.jpa.container.AbstractEntityManager.merge(AbstractEntityManager.java:565)
        at com.mezoline.admin.view.ProductView.saveAction(ProductView.java:82)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.sun.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:181)
        at com.sun.el.parser.AstValue.invoke(AstValue.java:289)
        at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
        at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
        at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
        at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
        at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
        at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
        at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:147)
        at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
        at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814)
        at javax.faces.component.UICommand.broadcast(UICommand.java:300)
        at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
        at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
        at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
        at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
        at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
        at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
        at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
        at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53)
        at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
        at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
        at io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59)
        at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
        at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
        at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
        at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
        at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
        at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
        at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
        at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
        at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
        at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
        at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
        at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
        at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
        at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [private int com.mezoline.domain.Category.id] by reflection for persistent property [com.mezoline.domain.Category#id] : 1:╩рЄхуюЁш   1
        at org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:71)
        at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:230)
        at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4725)
        at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:148)
        at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:896)
        ... 80 more
Caused by: java.lang.IllegalArgumentException: Can not set int field com.mezoline.domain.Category.id to java.lang.String
        at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
        at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
        at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:58)
        at sun.reflect.UnsafeIntegerFieldAccessorImpl.getInt(UnsafeIntegerFieldAccessorImpl.java:56)
        at java.lang.reflect.Field.getInt(Field.java:574)
        at org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:58)
        ... 84 more

00:03:12,075 ERROR [org.jboss.as.txn] (default task-81) WFLYTX0003: APPLICATION ERROR: transaction still active in request with status 1




Я уже топ 10 страниц по запросу в гугле выучил и ничего не нашел.

Моделька


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
package com.mezoline.domain;

import com.mezoline.domain.interfaces.Identified;

import javax.faces.bean.ManagedBean;
import javax.persistence.*;
import javax.transaction.Transactional;
import java.util.Collection;
import java.util.LinkedHashSet;

/**
 * Created by Hett on 06.04.2017.
 * Products category
 */

@Entity
@ManagedBean
@Transactional
public class Category implements Identified {

    @Id
    @GeneratedValue
    private int id;

    private String name;

    private String description;

    @ManyToMany(fetch = FetchType.LAZY, mappedBy = "categories", cascade = CascadeType.MERGE)
    private Collection<Product> products = new LinkedHashSet<>();

    public void addProduct(Product product) {
        ProductCategory productCategory = new ProductCategory();
        productCategory.getId().setCategory_id(this.getId());
        productCategory.getId().setProduct_id(product.getId());
        productCategory.setProduct(product);
        productCategory.setCategory(this);
        products.add(product);
        product.getCategories().add(this);
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public void setProducts(Collection<Product> products) {
        this.products = products;
    }

    public Collection<Product> getProducts() {
        return products;
    }

    public boolean equals(Object object) {
        if (!(object instanceof Category))
            return false;

        return this.id == ((Category) object).getId();
    }

    public String toString() {
        return this.getId() == null ? null : String.valueOf(this.getId() + ":" + this.name);
    }
}

...
Рейтинг: 0 / 0
JSF: selectManyCheckbox does not work
    #39439178
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HB уже обновил с 5.0.1 до 5.2.9.FINAl, где-то пишут что это баг его, но нет, видимо не баг.
...
Рейтинг: 0 / 0
JSF: selectManyCheckbox does not work
    #39439180
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обновил на сервере приложений в смысле.
...
Рейтинг: 0 / 0
JSF: selectManyCheckbox does not work
    #39439182
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, ну понятно, JSF туда коллекцию из String записывает.
...
Рейтинг: 0 / 0
JSF: selectManyCheckbox does not work
    #39439186
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettТолько не понимаю, что ему еще надо.
JSF в Java не особо любят. Не знал?
...
Рейтинг: 0 / 0
JSF: selectManyCheckbox does not work
    #39439188
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я тут не вопрос любви изучаю.
Вроде разобрался, что нужно конвертер еще сделать.
...
Рейтинг: 0 / 0
JSF: selectManyCheckbox does not work
    #39439205
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Остался один небольшой момент, который я никак не догоняю.
Вот есть чекбоксы:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
                                <p:selectManyCheckbox value="#{productView.selectedProduct.categories}">
                                    <f:selectItems
                                            value="#{productView.availableCategories}"
                                            var="category"
                                            itemLabel="#{category.name}"
                                            itemValue="#{category.id}"
                                    />
                                    <f:converter converterId="categoryConverter"/>
                                    <f:attribute name="collectionType" value="java.util.LinkedHashSet"/>
                                </p:selectManyCheckbox>




При сохранении валидатор ругается "form:j_idt87: Validation Error: Value is not valid"
Он пытается сравнить значение category.id с инстансом Category потому что.

Category.java
Код: java
1.
2.
3.
4.
5.
6.
    public boolean equals(Object object) {
        if (!(object instanceof Category))
            return false;

        return this.id.equals(((Category) object).getId());
    }



JSF передает сюда для валидации не инстанс Category, а его id, собстна поэтому он возвращает false и не дает сохранить форму.

Если захардкодить (для теста) return true; то все ок, форма сохраняется, в БД записывается.
Но мне тогда, получается, нужно будет костыль приделать типа

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    public boolean equals(Object object) {

        if (object instanceof Number && object.equals(this.getId()))
            return true;

        if (!(object instanceof Category))
            return false;

        return this.id.equals(((Category) object).getId());
    }



С таким методом все ок, работает. Но как-от он мне не нравится. Может я что-то упустил ранее.
...
Рейтинг: 0 / 0
JSF: selectManyCheckbox does not work
    #39439303
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все очень просто оказалось, что передал, то и получил. Нужно было так:

Код: xml
1.
itemValue="#{category}"
...
Рейтинг: 0 / 0
JSF: selectManyCheckbox does not work
    #39439311
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока разбирался, нашел вот такой конвертер:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
@FacesConverter(value = "entityConverter")
public class EntityConverter implements Converter {

    private static final Map<Object, String> entities = new WeakHashMap<>();


    public String getAsString(FacesContext context, UIComponent component, Object entity) {
        synchronized (entities) {
            if (!entities.containsKey(entity)) {
                String uuid = UUID.randomUUID().toString();
                entities.put(entity, uuid);
                return uuid;
            } else {
                return entities.get(entity);
            }
        }
    }


    public Object getAsObject(FacesContext context, UIComponent component, String uuid) {
        for (Map.Entry<Object, String> entry : entities.entrySet()) {
            if (entry.getValue().equals(uuid)) {
                return entry.getKey();
            }
        }
        return null;
    }

}



Работает на первый взгляд нормально.
Я так понял его жизненный цикл будет зависеть от управляемого бина, в котором он используется?
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF: selectManyCheckbox does not work
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]