Java 关于Seam上下文范围的问题
我对在seam组件的不同作用域中使用角色表示怀疑。例如: 我的项目有一个名为Parameter的表,它将项目的所有全局参数存储为URL、管理员电子邮件等。。。对于该表,有一个简单的CRUD管理界面 因此,在阅读seam 2.1.2文档时,我不认为我应该有一个具有应用范围的seam组件,因为参数将适用于所有项目和另一个范围,对于CRUD管理,一个事件范围 1) 对吗? 2) 范围必须在EntityBean或SessionBean上定义 守则: 会话Bean参数b 1) 这是正确的。如果这是整个应用程序的全局数据,请使用应用程序范围 2) 您不需要将作用域放在实体Bean中。由于您正在从应用程序范围的SFSB注入和退出,因此它将自动从应用程序范围注入/退出 但是您必须以某种方式创建初始实例(可能使用工厂)Java 关于Seam上下文范围的问题,java,jsf,jpa,jboss,seam,Java,Jsf,Jpa,Jboss,Seam,我对在seam组件的不同作用域中使用角色表示怀疑。例如: 我的项目有一个名为Parameter的表,它将项目的所有全局参数存储为URL、管理员电子邮件等。。。对于该表,有一个简单的CRUD管理界面 因此,在阅读seam 2.1.2文档时,我不认为我应该有一个具有应用范围的seam组件,因为参数将适用于所有项目和另一个范围,对于CRUD管理,一个事件范围 1) 对吗? 2) 范围必须在EntityBean或SessionBean上定义 守则: 会话Bean参数b 1) 这是正确的。如果这是整个应用
@Scope(ScopeType.APPLICATION)
@Name("parametroSB")
public class ParametroSB implements java.io.Serializable{
private static final long serialVersionUID = 1L;
@DataModel
private List<Parametro> lstParametro;
@In (required=false)
@Out
@DataModelSelection
private Parametro parametro;
@In
private EntityManager entityManager;
@In
private Events events;
@Logger
private static Log log;
@SuppressWarnings("unchecked")
@Factory("lstParametro")
@Observer("recarregaListaParametro")
public List<Parametro> getLstParametro() {
StringBuilder strHQLBuilder = new StringBuilder("select p from Parametro p where 1=1 ");
strHQLBuilder.append((parametro.getNome() != null && !parametro.getNome().equals("")) ? "and p.nome=#{parametro.nome} " : "");
strHQLBuilder.append((parametro.getValor() != null && !parametro.getValor().equals("")) ? "and p.valor=#{parametro.valor} " : "");
strHQLBuilder.append((parametro.getPais() != null && parametro.getPais().getId() > 0) ? "and p.pais.id=#{parametro.pais.id} " : "");
lstParametro = (List<Parametro>) entityManager.createQuery(strHQLBuilder.toString()).getResultList();
if (lstParametro.size() == 0 ){
FacesMessages.instance().add("Nenhum registro encontrado");
}
return lstParametro;
}
public void setLstParametro(List<Parametro> lstParametro) {
this.lstParametro = lstParametro;
}
@SuppressWarnings("unchecked")
public void delete(){
try{
if (parametro != null && parametro.getId() > 0){
//busca o objeto no banco. Necessario para fazer a exclusão
parametro = entityManager.find(Parametro.class, parametro.getId());
//exclui o objeto do banco
entityManager.remove(parametro);
//limpa o DataModelSelection
parametro = new Parametro();
//informa mensagem de sucesso
FacesMessages.instance().addFromResourceBundle("prepark.parametro.exclusao.sucesso");
//chama um evento para atualizar a lista
//events.raiseTransactionSuccessEvent("recarregaListaParametro");
}
}catch(Exception e){
FacesMessages.instance().add("Foi encontrado um erro na aplicação. Entre em contato com o Administrador");
}
}
/**
* @author : Cateno Viglio
* Método responsavel por fazer a persistencia no banco para uma inclusão e alteração.
* Caso o objeto Parametro não possua id, será feito um insert no banco.
*/
public void insert(){
Boolean blInsert = null;
try{
//verifica se esta sendo feito um insert ou update na base
blInsert = (parametro == null) ? null : ((parametro.getId() > 0) ? Boolean.FALSE : Boolean.TRUE );
if (blInsert != null){
//executa o insert ou update
entityManager.merge(parametro);
//limpa o DataModelSelection
parametro = new Parametro();
if (blInsert){
FacesMessages.instance().addFromResourceBundle("prepark.parametro.inclusao.sucesso");
events.raiseTransactionSuccessEvent("recarregaListaParametro"); //chama um evento para atualizar a lista
}else{
FacesMessages.instance().addFromResourceBundle("prepark.parametro.alteracao.sucesso"); //informa mensagem de sucesso
}
}
}catch(Exception e){
FacesMessages.instance().add("Foi encontrado um erro na aplicação. Entre em contato com o Administrador");
}
}
/**
* @author : Cateno Viglio
* Metodo responsavel por fazer a chamada a pagina de alteração.
*/
public void select(){}
}
@Scope(ScopeType.APPLICATION)
@Name("parametro")
@Table(name="parametro")
@Entity
public class Parametro implements java.io.Serializable{
private static final long serialVersionUID = 1L;
@Id
private int id;
@NotNull @Length(min=5, max=45)
@Column(name="NM_PARAMETRO")
private String nome;
@NotNull @Length(min=5, max=255)
private String valor;
@ManyToOne
@JoinColumn(name="FK_PAIS")
private Pais pais = new Pais();
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getValor() {
return valor;
}
public void setValor(String valor) {
this.valor = valor;
}
public Pais getPais() {
return pais;
}
public void setPais(Pais pais) {
this.pais = pais;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Parametro other = (Parametro) obj;
if (id != other.id)
return false;
return true;
}
}