내 수업에서 나는 movimentation의 상태를 확인하고 저장해야합니다. 나는이 검증을 어디에 넣을 지 모른다. 모델 레이어에 넣고 콩에 넣지 않는 것이 좋습니다.모델 계층의 비즈니스 규칙
나는이 일을 해요 :
1 - Movimentacao
@SuppressWarnings("serial")
@Entity
public class Movimentacao implements Serializable, Entidade {
...
@Column(nullable=false)
@NotNull
@DecimalMin("0.01")
private BigDecimal valor;
@Column(nullable=false)
@NotNull
@DecimalMin("0.01")
private BigDecimal valorQuitado;
@Enumerated(EnumType.STRING)
@Column(nullable=false, length=1)
private MovimentacaoStatus status;
...
public void setStatus(MovimentacaoStatus status) {
this.status = status;
}
}
2 - form.xhtml
<!-- show only on edit mode (status not null) -->
<h:outputText id="status" value="#{movimentacaoBean.movimentacao.status.descricao}" rendered="#{movimentacaoBean.movimentacao.status ne null}" />
3 - MovimentacaoBean
public String salvar() throws Exception{
movimentacaoService.salvar(movimentacao);
this.movimentacao = null;
this.todos = null;
context.addMessage(null, new FacesMessage("Movimentação salva com sucesso", ""));
context.getExternalContext().getFlash().setKeepMessages(true);
return "pretty:financeiro-lista";
}
에게 사용자가 상태를 정의하지 않았습니다. 어디에서 유효성 검사를해야합니까? setStatus? 내가 (예를 들어)에 대해 setStatus을 변경하는 경우
는 :
public void setStatus() {
//example. The real Business rules are other.
this.status = MovimentacaoStatus.P;
}
또는
public void setStatus(MovimentacaoStatus status) { //status variable never used...
//example. The real Business rules are other.
this.status = MovimentacaoStatus.P;
}
나는 아래 오류가 나타납니다 (MovimentacaoBean는 form.xhtml에서 상태받지 않기 때문에) :
를
발생 원인 : java.sql.SQLIntegrityConstraintViolationException : 열 'status'는 null 일 수 없습니다.
상태에 대한 비즈니스 규칙을 어떻게 그리고 어디에 넣어야합니까? 기록을 편집 할 때도 동일한 질문이 적용됩니다. "valor"및 "valorQuitado"에 따라 상태가 변경 될 수 있습니다. 편집 모드의 차이점은 form.xhtml에서 상태 속성을 볼 수 있다는 것입니다 (읽기 전용 - outputText)
당신은 당신의 빈에서 검증을 넣어해야합니다. Movimentacao에 저장하기 전에. 필드에서 필수 항목을 만들 수도 있습니다 (열거 형에서는 selectOneMenu가 최선의 선택입니다). – Milkmaid
@Milkmaid 어쩌면 MovimentacaoService에 더 좋을까요? 왜냐하면 JSF와 같은 다른 기술에 동일한 클래스를 사용해야 할 경우 커플 링이 필요하지 않기 때문입니다. –