我在jsp页面中遇到了很多问题.我应该用什么标签从用户那里获取日期(yyyy-MM-dd)并将其存储在Struts2动作的Date属性中?
我的操作中的属性声明为java.util.Date.我希望jsp页面的输入落在这个属性中.
请帮忙.
我得到无效字段错误(在JSP中),如果用作:textfield标签,以正确的格式输入日期.
我知道在stackoverflow和其他论坛上有很多关于这个错误的问题和答案.但我还是找不到解决方案......
出于速度原因,我有一个实用程序类,它根据提供的语言环境加载所有静态数据映射(例如几个月).
所以这个实用程序类看起来像这样:
public static final String GLOBAL_MESSAGES = "globalMessages";
private static Map<Integer,Month> monthsMap;
private ResourceBundle getResourceBundle(Locale locale) {
ResourceBundle rb = ResourceBundle.getBundle(GLOBAL_MESSAGES, locale);
return rb;
}
private Map<Integer,Month> getMonths() {
if(monthsMap == null) {
setMonths();
}
return monthsMap;
}
private void setMonths() {
try {
monthsMap = getFactory().getDAO().getAllMonths();
} catch (SQLException e) {
logger.error(e);
} catch (EmptyResultException e) {
logger.error(e);
}
}
public Map<Integer,Month> getMonths(Locale locale) {
if(locale == null) {
return monthsMap;
} else {
if(this.locale != locale) …Run Code Online (Sandbox Code Playgroud) 我有以下代码,我将实现/ getJson将返回用户对象的功能,因为json和/ getJson2将返回user2作为Json对象.
@ParentPackage("json-default")
public class JsonAction extends ActionSupport{
private User user = new User("John","Smith");
private User user2 = new User("Smith","John");
public String populate(){
return "populate";
}
@Action(value="/getJson", results = {
@Result(name="success", type="json")})
public String test(){
return "success";
}
@Action(value="/getJson2", results = {
@Result(name="success", type="json")})
public String test2(){
return "success";
}
@JSON(name="user")
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@JSON(name="user2")
public User getUser2() {
return user2;
}
public void setUser2(User user2) …Run Code Online (Sandbox Code Playgroud) 我想选择最新的框架来集成spring,struts和hibernate,但似乎那里有很多版本,而且它们的api也不同,所以我很困惑,如何选择合适的版本来集成它们呢?它们之间的区别是什么?
例如,我可以进行以下集成:Spring Framework 3.0 Struts 2.0 Hibernate 3.2
由于我是这些框架的新手,请指出正确的方向,让我知道如何选择正确的版本?
提前致谢 !
我已经回顾了一些关于SO的Struts 1 vs 2问题,但似乎没有人从我正在考虑的角度回答这个问题.
我即将开始构建一个新系统,对一个非常古老的桌面应用程序进行全面的重新设计.目标是使其基于Web,添加更多功能,使其更有用等(通常的再造原因).
开发该系统的团队主要是Java开发人员,过去5年来一直在Struts 1.x上工作.
该系统计划在未来许多年内存在,因此在更好的框架出现的3 - 5年内再次重新设计的想法不是一种选择.它并不打算大量使用AJAX.
我的问题是,当我的团队对Struts 1.x有如此丰富的经验时,为什么我会费心去Struts 2.我知道有一些改进,但我担心让团队加快速度,因错误使用等而导致返工的时间将远远超过我们从Struts 2获得的任何好处.我们喜欢Struts 1,它做的就是我们需要它,所有的设计模式,标准,最佳实践等都已到位.
Struts 2是否有任何杀手级功能或Struts 1中我不知道的严重问题会影响继续使用Struts 1的决定.
我有一个Action类,有4个动作方法.所有四种动作操作方法都使用json结果.
通过记录语句和调试,我已经验证了如果我调用action方法1,也会调用action方法2和3.但不是4.最后,再次调用action方法1并生成json结果
如果我将Action方法1的结果类型更改为具有jsp位置的默认调度程序,则仅调用操作方法1.(这是我想要的json结果的行为)希望这是有道理的.
有人有主意吗?这个问题在这里被问到/sf/ask/263738891/
但没有答案.如果您需要更多信息,请与我们联系.
@ResultPath("/WEB-INF/jsp/dta/")
public class GroupEntityAction extends BaseAction {
/**
*
*/
private static final long serialVersionUID = 6750675222824235086L;
private static Logger log = Logger.getLogger(GroupEntityAction.class);
private List<EntityBusiness> theUnusedEntityBusinessList;
private String assignedEntities[];
private long groupId;
private long businessId;
private String parentMe;
private long rptYear;
private String ssoId;
private String isSubmitted;
private String delimGoLiveEmails;
private List<String> theEmailList;
@Action(value = "ajaxGetAvailableEntityList",
results = { @Result(name = "success", type = "json") }
,
interceptorRefs = { @InterceptorRef("dtaStack"),
@InterceptorRef(value = "dtaStack", …Run Code Online (Sandbox Code Playgroud) 我使用struts2-json插件生成JSON数据和Ajax,用来自该JSON的数据(根据源)填充表(handsontable ).
现在,我需要使用JSON的Ajax从表中检索数据到Struts2 Action.首先,我已经使用JSON从Struts2 Action传递给Handsontable的数据实现了填充表,这非常简单且有效.但为什么保存不起作用,你可以在下面的附加代码中看到?
正如我在firebug中看到的那样发送了POST,并且在调试中,我的JSONSaveAction操作中检索到了请求,但是字段数据没有填充JSON数据,为什么?不应该通过struts2-json插件自动将数据绑定到java对象?我究竟做错了什么?
在handontable部分,该函数handsontable.getData()负责从表中获取整个数据.所以我这样使用它但没有成功:
$.ajax({
url: "../json/saveJSONDataAction.action",
data: {data: handsontable.getData()}, //returns all cells' data
dataType: 'json',
type: 'POST',
success: function (res) {
if (res.result === 'ok') {
$console.text('Data saved');
}
else {
$console.text('Save error');
}
}
});
Run Code Online (Sandbox Code Playgroud)
该函数handsontable.getData()实际上检索了我检查的所有数据,但是List<Report> data在我的JSONSaveAction操作中数据没有绑定到java对象.你知道为什么吗?
这是POST请求后我的表和firebug信息的屏幕截图:

@ParentPackage("json-default")
@Action(value="getJSONDataAction")
@Result(name="success", type="json")
public class JSONDataAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private List<Report> data = new ArrayList<Report>();
public JSONDataAction(){
data.add(new Report(1, "Chris", …Run Code Online (Sandbox Code Playgroud) 我试图通过使用struts令牌拦截器保护我的Web应用程序免受CSRF攻击.
我现在面临的问题是我们的JSP页面对服务器进行了多次调用(当JSP被转换为JS时,一个struts令牌被添加到JS.But,在这个JS中有多个Ajax请求.我希望我自己清楚.),因为令牌拦截器只对服务器的第一次请求得到验证.其他请求将失效,因为struts令牌在每次验证后都会重置.
有没有办法阻止Struts每次验证时重置令牌?是否有任何其他解决方案来处理struts拦截器.
我也在看tomcatcsrfprotection模块,我想我最终也会遇到同样的问题.
managepage.jsp:
<s:token />
<script type="text/javascript">
var strutsToken = "<s:property value="#session['struts.tokens.token']" />";
var requestParams = {mainAction: 'loadGroups','struts.token.name': 'token' , token:strutsToken};
Ext.Ajax.request({
url: 'manageUserAccount.action',
params: Ext.urlEncode(requestParams),
disableCaching: true,
success: this.actionCallback
});
//loading widgets
var requestParams = {mainAction: 'loadusers','struts.token.name': 'token' , token:strutsToken};
Ext.Ajax.request({
url: 'manageUserAccount.action',
params: Ext.urlEncode(requestParams),
disableCaching: true,
success: this.actionCallback
});
</script>
Run Code Online (Sandbox Code Playgroud)
Struts.xml:
<action name="manageUserAccountEdit" class="ManageUserAccountEditAction">
<interceptor-ref name="csrf-protection" />
<result name="success">/pages/manageUserAccount.jsp</result>
</action>
Run Code Online (Sandbox Code Playgroud)
我刚刚添加了最少的代码,以便更容易理解它.
我想在Struts2中使用json.但是,当我将动作返回类型设置为"json"时,我得到"没有为类型'json'定义的结果类型,其名称为'success'." Bellow是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.custom.i18n.resources" value="resource"/>
<package extends="struts-default" name="test">
<action name="inputHandler" class="inputHandlerAction">
<result name="input">/index.jsp</result>
<result>/result.jsp</result>
</action>
<action name="setLangHandler" class="com.sesoft.test.setLanguageHandler">
<result>/index.jsp</result>
</action>
<action name="Handler" class="com.sesoft.test.Handler">
<result>/test2.jsp</result>
</action>
</package>
<package name="example" extends="json-default">
<action name="ajaxHandler" class="com.sesoft.test.AjaxHandler">
<result name="success" type="json" />
</action>
</package>
</struts>
Run Code Online (Sandbox Code Playgroud)
在我添加json Action之前,所有其他操作都运行良好.但是在我添加json Action之后,服务器无法执行错误代码503.
libs我已将"jsonplugin-0.33.jar"添加到lib目录中.
我正在创建一个可通过移动和桌面设备访问的网站.所以我想创建我的应用程序的2个视图.我的操作代码和后端中的所有其他内容(管理员,DAO)是相同的.只是JSP改变了两者.
我如何通过Struts 2做到这一点?
struts2 ×10
java ×6
json ×3
ajax ×2
jsp ×2
bundle ×1
handsontable ×1
hibernate ×1
javascript ×1
jquery ×1
locale ×1
properties ×1
spring ×1
struts-1 ×1