我正在制作JQuery Ajax帖子,并希望任何actionmessages,actionerrors并fielderrors在响应中添加到操作中(以JSON格式).
我添加了这个结果:
<result name="input" type="json">
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">fieldErrors,actionErrors</param>
</result>
Run Code Online (Sandbox Code Playgroud)
到我的动作配置struts.xml.
我得到了:{"actionErrors":[],"fieldErrors":{}}尽管在值堆栈上存在字段错误,但作为响应返回.
如果我将结果配置更改为:
<result name="input" type="json">
<param name="ignoreHierarchy">false</param>
<param name="root">fieldErrors</param>
</result>
Run Code Online (Sandbox Code Playgroud)
JSON响应是我预期的::
{"thePropertyWithValidationError":["You must supply correct information."]}
如果可能的话,我真的希望响应中包含操作错误和字段错误.
有任何想法吗?非常感谢你提前!!
编辑:
我想我可能需要利用某种正则表达式......我试过:
<result name="input" type="json">
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">fieldErrors\[\d+\],actionErrors\[\d+\]</param>
</result>
Run Code Online (Sandbox Code Playgroud)
结果相同:
{"actionErrors":[],"fieldErrors":{}}
Run Code Online (Sandbox Code Playgroud)
我还发现了这个错误报告,当我使用Struts v2.2.1时,这可能会导致我的问题.(v2.2.2尚未出局)
编辑#2:
也许JSONValidationInterceptor是我需要的......我似乎无法弄清楚如何将它与我的自定义JQuery Ajax帖子一起使用...
我正在使用json拦截器来填充我的属性 - 下面是我的动作配置:
<action name="MyAction" method="add" class="com.test.actions.MyAction">
<interceptor-ref name="json" />
<interceptor-ref name="jsonValidationWorkflowStack"/>
<interceptor-ref name="MyCustomInterceptor" />
<result name="success" type="json" /> …Run Code Online (Sandbox Code Playgroud) 我正在使用Struts2
我得到错误,因为没有为动作和结果输入定义结果
<action name="update" method="updatePhase" class="Project">
<result name="updated">/Project.jsp</result>
</action>
Run Code Online (Sandbox Code Playgroud)
我的动作不是传递给我的java类.
谁能帮我?
我正在研究这个问题,这样我才能在面试中做出更好的回应.我一直在寻找清晰简洁的答案.
到目前为止,如果我错了或缺乏细节,请务必纠正我:
这看起来像是一个准确而完整的答案吗?我应该添加或更正任何内容吗?线程问题/差异怎么样?
我目前正在创建一个Web应用程序,用户可以从数据库中获取标记为JSON,
这是我的struts动作
public String execute(){
Gson gson = new Gson();
String tagsAsJson = gson.toJson(audioTaggingService.findTagsByName(q));
System.out.println(tagsAsJson);
return "success";
}
Run Code Online (Sandbox Code Playgroud)
更新:
在tagsAsJson已经处于JSON格式的所有我想要的是只返回,而不是整个集体诉讼本身.
它返回这样的东西
这是我想要返回给用户的数据
[{"id":2,"name":"Dubstep","description":"Dub wob wob"},{"id":3,"name":"BoysIIMen","description":"A 1990s Boy Band"},{"id":4,"name":"Sylenth1","description":"A VST Plugin for FLStudio "}]
Run Code Online (Sandbox Code Playgroud)
如何返回tagsAsJsonas ar JSON响应?因为JSON响应将由客户端代码使用.
如何抑制FreeMarker模板错误?我在这里看:http://freemarker.sourceforge.net/docs/pgui_config_errorhandling.html 但我不明白如何"TemplateExceptionHandler.IGNORE_HANDLER".我正在使用Struts2以及如何显示另一个ftl页面而不是显示堆栈跟踪?
class MyTemplateExceptionHandler implements TemplateExceptionHandler {
public void handleTemplateException(TemplateException te, Environment env, java.io.Writer out)
throws TemplateException {
try {
out.write("[ERROR: " + te.getMessage() + "]");
} catch (IOException e) {
throw new TemplateException("Failed to print error message. Cause: " + e, env);
}
}
}
...
cfg.setTemplateExceptionHandler(new MyTemplateExceptionHandler());
Run Code Online (Sandbox Code Playgroud)
在http://freemarker.sourceforge.net/docs/pgui_config_errorhandling.html上找到了上面的内容 我如何使用它?最后一行,cfg来自哪里?
"进入FreeMarker API的主要入口点"...... http://massapi.com/source/freemarker-2.3.18/src/freemarker/template/Configuration.java.html
所以,这是主要的切入点,我猜cfg来自这个类.我仍然没有看到控制器将如何进入我的类MyTemplateExceptionHandler.
以下行需要去哪里?
cfg.setTemplateExceptionHandler(new MyTemplateExceptionHandler());
Run Code Online (Sandbox Code Playgroud)
这只是将这条线放在正确位置的问题吗?
这是我当前班级的样子:
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.Writer;
import java.util.Properties;
import freemarker.cache.FileTemplateLoader;
import freemarker.cache.MultiTemplateLoader;
import …Run Code Online (Sandbox Code Playgroud) 我认为这些技术确实优于Java行业
我目前正在尝试学习Struts2.
我创建了一个表单,一个处理它的动作,一个用于验证它的XML,以及struts.xml中的操作.
每次表单显示时,即使是第一次,Struts2也会尝试验证,因此在用户有机会完成错误之前会显示错误.
这是相关代码:
<!-- /WebContent/views/user/login.jsp -->
<?xml version="1.0" encoding="ISO-8859-1" ?>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login Page</title>
<s:head />
</head>
<body>
<h1>Login Page</h1>
<s:form action="executeUser">
<s:textfield key="userBean.userName" />
<s:password key="userBean.password" />
<s:submit align="center" />
</s:form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
<!-- /src/struts.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package …Run Code Online (Sandbox Code Playgroud) 我有一个动作,该动作具有日期列表属性.请求参数将以"yyyy.MM.dd"格式显示.在"-coversion.properties"文件中(我不想为此目的使用全局类型转换器).
我没有使用注释.
如果它只是一个日期而不是集合,那么特定于属性的转换将很容易.是否可以将特定于属性的类型转换应用于List的元素?
我有以下课程
package com.test;
public class SomeClass {
public enum COLOR {RED,BLUE}
}
Run Code Online (Sandbox Code Playgroud)
我想COLOR在JSP中访问枚举值.我尝试了以下代码,但它不起作用.
<s:property value="@com.test.SomeClass.COLOR@RED"/>
<s:property value="@com.test.SomeClass@COLOR.RED"/>
Run Code Online (Sandbox Code Playgroud)
以前有人问过这个问题吗?[我已经在struts.xml中启用了静态方法访问]
我想在Hibernate中获取最后插入的值的id.
搜索后:
Long lastId = ((Long) session.createSQLQuery("SELECT LAST_INSERT_ID()").uniqueResult()).longValue();
Run Code Online (Sandbox Code Playgroud)
但是下面的代码给了我这个错误:
java.lang.ClassCastException:java.math.BigInteger无法强制转换为java.lang.Long
请分享你的想法!
解
Long lastId = ((BigInteger) session.createSQLQuery("SELECT LAST_INSERT_ID()").uniqueResult()).longValue();
Run Code Online (Sandbox Code Playgroud)
别忘了导入:
import java.math.BigInteger;