Jsf 事务中止错误消息通知更改
我向数据库表中添加了唯一约束,以防止重复条目。我已经测试了它和它的工作状态,在我的页面上,当我尝试提交相同的值时,我收到一条消息,说事务中止,这意味着它的工作状态良好,有没有办法更改消息: 事务中止 例如: 任务已分配给用户 如果是,我将如何改变它? 如果可能,只更改唯一约束冲突的消息,那将非常好 我选择值并使用创建方法保存它们:Jsf 事务中止错误消息通知更改,jsf,messages,Jsf,Messages,我向数据库表中添加了唯一约束,以防止重复条目。我已经测试了它和它的工作状态,在我的页面上,当我尝试提交相同的值时,我收到一条消息,说事务中止,这意味着它的工作状态良好,有没有办法更改消息: 事务中止 例如: 任务已分配给用户 如果是,我将如何改变它? 如果可能,只更改唯一约束冲突的消息,那将非常好 我选择值并使用创建方法保存它们: public String create() { try { getFacade().create(current);
public String create() {
try {
getFacade().create(current);
JsfUtil.addSuccessMessage(ResourceBundle.getBundle("webConstants/Bundle").getString("TimeLoggingDetailCreated"));
recreateModel();
return prepareCreate();
} catch (Exception e) {
JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("webConstants/Bundle").getString("PersistenceErrorOccured"));
return null;
}
}
并在页面上显示如下消息:
<h:panelGroup id="messagePanel" layout="block" >
<h:messages infoClass="alert alert-success" errorClass="alert alert-danger" layout="row col-12" warnClass="alert alert-info" fatalClass="alert"/>
</h:panelGroup>
web.xml:
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
javax.faces.PROJECT_阶段
发展
简短版本:只需删除JsfUtil.addErrorMessage(…)中的“e”
似乎您使用的是像我这样的Netbeans生成的代码:-)
我遇到了同样的问题,但我找到了问题的根源。。
类JSFUtil中有一个addErrorMessage(…)方法,该方法由异常调用,它查找并找到了异常(EJBException)的本地化字符串
问题-在本例中未使用第二个参数“String defaultMsg”
public static void addErrorMessage(Exception ex, String defaultMsg) {
String msg = ex.getLocalizedMessage();
System.out.println("DefaultMsg: " + defaultMsg);
System.out.println("LocalMsg: " + msg);
if (msg != null && msg.length() > 0) {
addErrorMessage(msg);
} else {
addErrorMessage(defaultMsg);
}
}
因此,您可以重写该方法,或者只在try..catch块中使用addErrorMessage(String msg),它直接从Bundle.properites文件返回您自己的字符串
public void create() {
try {
getFacade().create(current);
recreateModel();
JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("StandortCreated"));
} catch (EJBException e) {
JsfUtil.addErrorMessage(ResourceBundle.getBundle("/Bundle").getString("YourOwnFromBundle"));
} catch (Exception e) {
JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
}
}
答案取决于当前消息的确切来源以及您当前显示该消息的方式。此信息在问题中不可用,因此此问题无法回答。您好,这是一个crud应用程序,我正在尝试新的东西,我已将代码添加到问题中,您究竟如何无法更改错误消息?有了这段代码,就有点太明显了,以至于我无法想象和理解您在这方面到底是如何失败的。一点逻辑思考和常识应该已经暗示,您只需向捆绑包中添加一条新消息并引用它,而不是
“persistenceErrorOccursed”
,对吗?@BalusC In the bundle:persistenceErrorOccursed=发生了持久性错误。所以“PersistenceErrorOccursed”一开始就没有被调用,所以即使我在bundle中创建了一条新消息并引用它,它也不会被使用?我的问题是,我收到一条消息说事务已中止,而不是发生了持久性错误。错误代码是1062,来自org.eclipse.persistence.exceptions.DatabaseException.sqlException。所以我的问题是:如何更改“事务中止”错误文本?好的,这确实是一个严重的问题。事实上,这是一个奇怪的问题,因为您在异常上有一个通用的包罗万象。“事务中止”错误是如何显示的?当javax.faces.PROJECT\u STAGE
设置为Development
时,您只能在Mojarra中看到的JavaScript对话框中?服务器日志中是否也有堆栈跟踪?如果是,请将其包括在您的问题中。
public void create() {
try {
getFacade().create(current);
recreateModel();
JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("StandortCreated"));
} catch (EJBException e) {
JsfUtil.addErrorMessage(ResourceBundle.getBundle("/Bundle").getString("YourOwnFromBundle"));
} catch (Exception e) {
JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
}
}