0

xhtmlでオブジェクトに値を設定しているのですが、マネージドBeanではnullになってしまいます。

「ユーザー」エンティティは「グループ」エンティティと多対多の関係にあるため、フォームではデータベースから「グループ」を動的にリロードしますが、コマンド ボタンをクリックすると「ユーザー」オブジェクトが null になります。

ここに私のxhtmlがあります:

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:p="http://primefaces.org/ui"
  xmlns:f="http://java.sun.com/jsf/core">
<h:head>
    <title>Kullanıcı İşlemleri</title>
</h:head>
<h:body>
    <h:form id="addUser">
        <p:panel header="Kullanıcı Tanımlama">
            <p:messages autoUpdate="true"/>
            <h:panelGrid columns="2">
                Adı:<p:inputText value="#{userBean.user.name}"/>
                Soyadı : <p:inputText value="#{userBean.user.surname}"/>
                Kullanıcı Adı : <p:inputText value="#{userBean.user.username}"/>
                E-mail: <p:inputText value="#{userBean.user.email}"/>
                Parola : <p:password value="#{userBean.user.password}"/>
                Kullanıcı Tipi: 
                <p:selectManyCheckbox value="#{userBean.user.groupsCollection}">
                    <f:selectItems value="#{userBean.groupList}" var="grp" itemLabel="#{grp.groupName}" itemValue="#{grp.groupId}"/>
                </p:selectManyCheckbox>

                <p:commandButton value="Kullanıcıyı Ekle" action="#{userBean.persist()}" process="@this" update="@form" />

            </h:panelGrid>
        </p:panel>
    </h:form>
</h:body>

マネージド Bean :

package com.mkmturizm.bean;

import com.mkmturizm.entity.Groups;
import com.mkmturizm.entity.Users;
import com.mkmturizm.service.GroupService;
import com.mkmturizm.service.UserService;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

@ManagedBean
@ViewScoped
public class UserBean implements Serializable {

private Users user = new Users();
private List<Groups> groupList = new ArrayList<Groups>();

@EJB
UserService userService;
@EJB
GroupService groupService;

public void persist() throws Exception
{

    userService.persist(user);
    user = new Users();

    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Kayıt başarıyla gerçeklerşti", ""));

}

@PostConstruct
public void getAllGroups()
{
    groupList = groupService.groupsList();
}

public List<Groups> getGroupList()
{
    return groupList;
}

public void setGroupList(List<Groups> groupList)
{
    this.groupList = groupList;
}

public Users getUser()
{
    return user;
}

public void setUser(Users user)
{
    this.user = user;
}
}

更新:(再愛用)

グループのIDを送信しているため、選択したアイテムの値をgrpとして変更したため、グループオブジェクトをキャストできませんが、例外をスローできません。その後、カスタム コンバーターを作成しましたが、カスタム コンバーターは xhtml を変更する前にうまく機能すると思います。

<f:selectItems value="#{userBean.groupList}" var="grp" itemLabel="#{grp.groupName}" itemValue="#{grp}"/>
4

0 に答える 0