在我的課程中,我需要驗證並保存movimentation的狀態。我不知道把這個驗證放在哪裏。我想我最好把它放在模型層上,而不是放在我的bean中。模型層上的業務規則
我這樣做:
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'不能爲空
如何以及在哪裏我應該放置狀態的業務規則?編輯記錄時,同樣的問題也適用。取決於「勇氣」和「valorQuitado」,狀態可能會改變。編輯模式的不同之處在於狀態屬性在form.xhtml(只讀 - outputText)上可見
你應該把驗證在bean。在Movimentacao上執行保存之前。你也可以在該領域做出要求(使用枚舉selectOneMenu是最好的選擇)。 – Milkmaid
@Milkmaid也許在MovimentacaoService上更好,對不對?因爲如果我需要在JSF的其他技術上使用相同的類,則不會有耦合。 –