65324
JavaEEで部署管理アプリを作成しています。  
部署編集画面で新規データを入力し、新規作成ボタンを押した際に、エラー画面（あらかじめ用意していたもの）に遷移するようになってしまいます。  
エラー原因がもし分かればご教授頂ければ幸いです。

```

    <?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:f="http://xmlns.jcp.org/jsf/core"
        xmlns:h="http://xmlns.jcp.org/jsf/html"
        xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>部署編集</title>
        <link rel="stylesheet" type="text/css" href="/practice2016/css/practice2016.css" />
    </h:head>
    <h:body>
        <f:view>
        <div class="center">
            <div class="center">
                <h1>部署編集</h1>
            </div>
            <h:messages styleClass="facesMessage" errorClass="error" />
            <h:form>
                <div class="frame2">
                    <div class="search">
                        <div>
                            <span class="label">ID</span>
                            <span class="input1"><h:inputText value="#{editBean.id}" disabled="#{editBean.disableId}" label="ID" size="13"/></span>
                        </div>
                        <div>
                            <span class="label">部署番号</span>
                            <span class="input2"><h:inputText value="#{editBean.deptNo}" maxlength="9" label="部署番号" size="13"/></span>
                        </div>
                        <div>
                            <span class="label">部署名</span>
                            <span class="input3"><h:inputText value="#{editBean.deptName}" maxlength="20" label="部署名" size="13"/></span>
                        </div>
                        <div>
                            <span class="label">場所</span>
                            <span class="input4"><h:inputText value="#{editBean.loc}" maxlength="20" label="場所" size="13"/></span>
                        </div>
                    </div>
                    <div class="search2">
                        <h:commandButton class="return" action="#{editBean.back()}" value="戻る"/>
                        <h:commandButton class="save" action="#{editBean.save()}" value="保存"/>
                        <h:commandButton class="delete" action="#{editBean.delete()}" value="削除"  onclick="return confirm('削除しますか？');"/>
                    </div>
                </div>
            </h:form>
        </div>
        </f:view>
    </h:body>
    </html>
    
    
```

```

    /**
     * 編集画面のバッキングBean
     */
    @Model
    @ViewScoped
    public class EditBean extends AbstractBean implements Serializable {
    
        @Inject
        private EditLogic logic;
        private Long id;
    
        @NotEmpty(message="{errors.required}")
        private String deptName;
    
        @Min(value=1)
        @NotEmpty(message="{errors.required}")
        private Integer deptNo;
    
        private String loc;
        private Integer versionNo;
        private boolean disableId;
    
        /**
         * @return id
         */
        public Long getId() {
            return id;
        }
        /**
         * @param id セットする id
         */
        public void setId(Long id) {
            this.id = id;
        }
        /**
         * @return deptName
         */
        public String getDeptName() {
            return deptName;
        }
        /**
         * @param deptName セットする deptName
         */
        public void setDeptName(String deptName) {
            this.deptName = deptName;
        }
        /**
         * @return deptNo
         */
        public Integer getDeptNo() {
            return deptNo;
        }
        /**
         * @param  セットする deptNo
         */
        public void setDeptNo(Integer deptNo) {
            this.deptNo = deptNo;
        }
        /**
         * @return loc
         */
        public String getLoc() {
            return loc;
        }
        /**
         * @param loc セットする loc
         */
        public void setLoc(String loc) {
            this.loc = loc;
        }
        /**
         * @return versionNo
         */
        public Integer getVersionNo() {
            return versionNo;
        }
        /**
         * @param versionNo セットする versionNo
         */
        public void setVersionNo(Integer versionNo) {
            this.versionNo = versionNo;
        }
        /**
         * @return disableId
         */
        public boolean isDisableId() {
            return disableId;
        }
        /**
         * @param disableId セットする disableId
         */
        public void setDisableId(boolean disableId) {
            this.disableId = disableId;
        }
    
        /**
         * 初期処理
         */
        @PostConstruct
        @Auth
        public void init(){
            if(FlashUtil.get("id") != null){
                this.setId(Long.valueOf(FlashUtil.get("id")));
                logic.init(this);
            }
        }
    
        /**
         * 戻るボタン押下時処理
         * @return 遷移先画面
         */
        @Auth
        public String back(){
            // 検索画面に戻る
            return "/views/dept/search/index.xhtml?faces-redirect=true";
        }
    
        /**
         * 保存ボタン押下時処理
         * @return 遷移先画面
         */
        @Auth
        public String save(){
            logic.save(this);
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage("", CommonUtil.getFacesInfoMessage("messages.add.complete"));
            return null;
        }
    
        /**
         * 削除ボタン押下時処理
         * @param id
         * @return 遷移先画面
         */
        @Auth
        public String delete(){
            logic.delete(this);
            return back();
        }
    }
    
```

```

    /**
     * 編集画面のビジネスロジックI/F
     */
    public interface EditLogic {
        /**
         * 初期処理
         * @param bean 編集画面のバッキングBean
         */
        public void init(EditBean bean);
    
        /**
         * 保存処理
         * @param bean 編集画面のバッキングBean
         */
        public void save(EditBean bean);
    
        /**
         * 削除処理
         * @param bean 編集画面のバッキングBean
         */
        public void delete(EditBean bean);
    }
    
    
```

```

    /**
     * 編集画面のビジネスロジック
     */
    @Stateless
    public class EditLogicImpl implements EditLogic {
    
        @Inject
        private DeptDao dao;
    
        /**
         * 初期処理
         * @param bean 編集画面のバッキングBean
         */
        @Override
        public void init(EditBean bean){
            Long id = bean.getId();
            if(id != null){
                Dept dept = dao.findById(id);
                bean.setId(dept.getId());
                bean.setDeptName(dept.getDeptName());
                bean.setDeptNo(dept.getDeptNo());
                bean.setLoc(dept.getLoc());
                bean.setVersionNo(dept.getVersionNo());
                bean.setDisableId(true);
            }
            if(bean.getVersionNo() == null){
                bean.setVersionNo(0);
            }
        }
    
        /**
         * 保存処理
         * @param bean 編集画面のバッキングBean
         */
        @Override
        public void save(EditBean bean){
            Dept dept = new Dept();
            dept.setId(bean.getId());
            dept.setDeptName(bean.getDeptName());
            dept.setDeptNo(bean.getDeptNo());
            dept.setLoc(bean.getLoc());
            if(bean.getVersionNo() != null){
                dept.setVersionNo(bean.getVersionNo());
            }else{
            }
    
            if(bean.isDisableId()){
                // 更新
                dao.update(dept);
                bean.setVersionNo(dept.getVersionNo());
            }else{
                // 新規登録
                dao.insert(dept);
                bean.setDisableId(true);
            }
        }
    
        /**
         * 削除処理
         * @param bean 編集画面のバッキングBean
         */
        @Override
        public void delete(EditBean bean){
            // 削除
            dao.delete(bean.getId());
        }
    }
    
    
```

```

    /**
     * The persistent class for the DEPT database table.
     *
     */
    @Entity
    @NamedQuery(name="Dept.findAll", query="SELECT d FROM Dept d")
    public class Dept implements Serializable {
        private static final long serialVersionUID = 1L;
    
        @Id
        private long id;
    
        @Column(name="DEPT_NAME")
        private String deptName;
    
        @Column(name="DEPT_NO")
        private int deptNo;
    
        private String loc;
    
        @Column(name="VERSION_NO")
        private int versionNo;
    
        public Dept() {
        }
    
        public long getId() {
            return this.id;
        }
    
        public void setId(long id) {
            this.id = id;
        }
    
        public String getDeptName() {
            return this.deptName;
        }
    
        public void setDeptName(String deptName) {
            this.deptName = deptName;
        }
    
        public Integer getDeptNo() {
            return this.deptNo;
        }
    
        public void setDeptNo(Integer deptNo) {
            this.deptNo = deptNo;
        }
    
        public String getLoc() {
            return this.loc;
        }
    
        public void setLoc(String loc) {
            this.loc = loc;
        }
    
        public Integer getVersionNo() {
            return this.versionNo;
        }
    
        public void setVersionNo(Integer versionNo) {
            this.versionNo = versionNo;
        }
    }
    
```
CC BY-SA 4.0
2020-04-03T03:35:17.887
65320
2020-04-03T06:41:07.183
2020-04-03T03:50:37.290
4236
question
java-ee
エラー原因がわかりません
String型でないdeptNoに@NotEmptyを用いていたのがエラーの原因でした。ありがとうございました。
CC BY-SA 4.0
2020-04-03T06:41:07.183
65324
2020-04-03T06:41:07.183
65320
answer