我会让自己很客观:
一个用户注册自己,在这个操作后register我想表示一些消息说恭喜!欢迎!,如果duplicated key在我的数据库中存在某些问题,那样的话或某些消息.
我已经知道如何用RichFaces显示一些消息,但我想保持简单,RichFaces用CSS搞砸了一点,所以我想暂时避免使用它.
所以这里是我的页面和我的托管bean:
<h:form id="form_user">
<h:panelGrid columns="3">
<h:outputLabel for="name" value="Name:" />
<h:inputText id="name" value="#{personc.personb.person.name}">
<f:ajax event="blur" listener="#{personValidate.name}" render="m_name" />
</h:inputText>
<h:message id="m_name" for="name" />
<!--other fields...-->
<h:commandButton value="Register" action="#{personc.register}">
<f:ajax execute="@form" render="@form" />
</h:commandButton>
</h:panelGrid>
</h:form>
Run Code Online (Sandbox Code Playgroud)
人控制器(遵循MVC结构):
@ManagedBean(name="personc")
@SessionScoped
public class PersonController implements Serializable {
private static final long serialVersionUID = 2000186666864113813L;
// attributes
@EJB PersonEAO personEAO;
private PersonBean personb;
public PersonController() {
personb = new PersonBean();
}
// methods
public String register(){
if (personEAO.register(personb.getUser(), personb.getPerson())){
status = "welcome!";
return "success";
}else{
status = "an error occurs";
return "failure";
}
}
// others methods..
Run Code Online (Sandbox Code Playgroud)
而PersonEAO实体:
@Stateless
@LocalBean
public class PersonEAO {
@PersistenceContext
EntityManager em;
public PersonEAO() {}
public boolean register(User user, Person person){
try{
em.persist(user);
person.setUser(user);
em.persist(person);
}catch(Exception e){
// would like to treat better the exceptions here
// should I keep returning boolean here ? or a string would be better ?
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
我有一些问题 :
如果我应该继续boolean从使用JPA的操作返回,我想向用户说出更好的消息,说明发生了什么duplicate key,例如.
如何使用预定义值创建一个枚举,而不是catch(Exception e)执行几个更具体的捕获,并在每个捕获中使用该特定枚举值设置方法的 retrun 参数
枚举示例
public enum REGISTERCODE{
SUCCESS , DUPLICATE, GENERAL_ERROR, SESSION_EXPIRED, MORE, MORE2;
}
Run Code Online (Sandbox Code Playgroud)
将签名更改为类似的内容
public REGISTERCODE register(User user, Person person){...return REGISTERCODE.SUCCESS...
Run Code Online (Sandbox Code Playgroud)
另外..您可以在语言文件中使用前缀 ResgisterCode_ 创建密钥,然后基于此将消息返回给您的用户,例如
localizationClass.getMessageFromBundle("ResgisterCode_"+REGISTERCODE_variable.name())
Run Code Online (Sandbox Code Playgroud)
其中REGISTERCODE_variable是 register 方法的返回值
然后在 bean 的调用者方法中personc根据枚举值返回详细消息...
| 归档时间: |
|
| 查看次数: |
2056 次 |
| 最近记录: |