我有一个有两个按钮的表单.一个用于保存记录,另一个用于取消保存过程.我正在使用rails.js (一个常见的AJAX/jQuery插件,对于那些你不知道的人) javascript文件,它与jQuery一起用于不引人注目的javascript/ajax调用.当我通过ajax发送表单数据时,我希望我单击的按钮的名称和值与其余数据一起提交,以便我可以根据单击的按钮决定要执行的操作.
rails.js文件中的方法.serializeArray()用于将表单数据发送到服务器.问题是这不包括我点击的按钮的名称/值对.jQuery的网站声明他们是故意这样做的(尽管我认为他们应该这样做):
"的.serializeArray()方法使用标准的W3C规则成功的控制,以确定哪些元素应当包括;特别是所述元件不能被禁用,并且必须包含一个名称属性没有提交因为形式不使用按钮提交按钮值被序列化.".
他们如何假设表格没有使用按钮提交?我认为这没有任何意义和错误的假设.
根据W3C规则将其激活为提交表单的被认为是一个按钮成功控制.
由于jQuery的开发商已经决定这样做的目的,我可以假设有另一个方法DOES NOT在系列化排除启动按钮?
编辑:这是我的表格可能看起来像什么的快速示例...
<!DOCTYPE html5>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#form').submit(function(e) {
// put your breakpoint here to look at e
var x = 0;
});
});
</script>
</head>
<body>
<form id="form">
<input name="name" type="text"><br/>
<input name="commit" type="submit" value="Save"/>
<input name="commit" type="submit" value="Cancel"/>
</form>
</body>
Run Code Online (Sandbox Code Playgroud) 我的Rails项目中有一个数据模型,它有一个序列化字段:
class Widget < ActiveRecord::Base
serialize :options
end
Run Code Online (Sandbox Code Playgroud)
选项字段可以包含可变数据信息.例如,以下是fixtures文件中一条记录的选项字段:
options:
query_id: 2
axis_y: 'percent'
axis_x: 'text'
units: '%'
css_class: 'occupancy'
dom_hook: '#average-occupancy-by-day'
table_scale: 1
Run Code Online (Sandbox Code Playgroud)
我的问题是让用户在标准表单视图中编辑此信息的正确方法是什么?
如果您只是为选项字段使用一个简单的文本区域字段,您将只获得一个yaml转储表示,并且该数据将仅作为字符串发回.
在Rails中编辑这样的序列化哈希字段的最佳/正确方法是什么?
当我写这样的代码
[XmlIgnore]
[NonSerialized]
public List<string> paramFiles { get; set; }
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Attribute 'NonSerialized' is not valid on this declaration type.
It is only valid on 'field' declarations.
Run Code Online (Sandbox Code Playgroud)
如果我写
[field: NonSerialized]
Run Code Online (Sandbox Code Playgroud)
我收到以下警告
'field' is not a valid attribute location for this declaration.
Valid attribute locations for this declaration are 'property'.
All attributes in this block will be ignored.
Run Code Online (Sandbox Code Playgroud)
如果我写
[property: NonSerialized]
Run Code Online (Sandbox Code Playgroud)
我再次收到以下错误:
Attribute 'NonSerialized' is not valid on this declaration type.
It is only valid on 'field' declarations.
Run Code Online (Sandbox Code Playgroud)
我怎样才能[NonSerialized]在物业上使用?
我有一个实现Serializable的公共类,它由多个其他类扩展.之前只有那些子类被序列化 - 从来不是超类.
超类定义了一个serialVersionUID.
我不确定它是否重要,但它没有标记为私有,而是它只是默认保护 - 你可能会说它是包保护
static final long serialVersionUID = -7588980448693010399L;
Run Code Online (Sandbox Code Playgroud)
但是,超类或任何子类都实现了readObject或writeObject,并且没有子类具有明确定义的serialVersionUID.我认为超类中定义的一个就足够了.
尽管如此,只要读回以前的序列化对象,直到新的实例变量,List/ArrayList以及新方法被添加到超类中,并且一些私有实例变量被添加到其子类之一,就可以了. .
现在,当尝试读回先前序列化的对象时,会抛出异常.一个类似于此:
com.SomeCompany.SomeSubClass; local class incompatible: stream classdesc serialVersionUID = 1597316331807173261, local class serialVersionUID = -3344057582987646196
Run Code Online (Sandbox Code Playgroud)
我假设这是因为默认的serialVersionUID,因为我没有在任何子类中声明一个而使用,现在由于超类和一个子类的变化而改变了.
关于如何摆脱这种困境的建议将不胜感激.我假设我需要实现readObject和writeObject,但除了调用defaultReadObject()和defaultWriteObject()之外,我不确定我需要做什么.我也不知道是否需要将serialVerisonUID添加到所有子类中,或者是否需要每个子类实现readObject和writeObject,或者我是否可以实现它们一次,假设我需要在超类中完成.
我需要能够控制如何/是否序列化类上的某些属性.最简单的情况是[ScriptIgnore].但是,我只希望这些属性能够适用于我正在处理的这个特定的序列化情况 - 如果应用程序中的下游其他模块也想要序列化这些对象,则这些属性都不应该妨碍.
所以我的想法是在属性MyAttribute上使用自定义属性,并使用知道查找该属性的钩子初始化JsonSerializer的特定实例.
乍一看,我没有看到JSON.NET中任何可用的钩子点都会为PropertyInfo当前属性提供这样的检查 - 只有属性的值.我错过了什么吗?或者更好的方法来解决这个问题?
是不是可以附加到ObjectOutputStream?
我试图附加到对象列表.以下代码段是一个在作业完成时调用的函数.
FileOutputStream fos = new FileOutputStream
(preferences.getAppDataLocation() + "history" , true);
ObjectOutputStream out = new ObjectOutputStream(fos);
out.writeObject( new Stuff(stuff) );
out.close();
Run Code Online (Sandbox Code Playgroud)
但是当我尝试阅读它时,我只得到文件中的第一个.然后我明白了java.io.StreamCorruptedException.
阅读我正在使用
FileInputStream fis = new FileInputStream
( preferences.getAppDataLocation() + "history");
ObjectInputStream in = new ObjectInputStream(fis);
try{
while(true)
history.add((Stuff) in.readObject());
}catch( Exception e ) {
System.out.println( e.toString() );
}
Run Code Online (Sandbox Code Playgroud)
我不知道会有多少个物品存在,所以我在读书时没有例外.从谷歌所说的这是不可能的.我想知道是否有人知道方法?
java serialization append objectoutputstream objectinputstream
I have a model that uses a serialized column:
class Form < ActiveRecord::Base
serialize :options, Hash
end
Run Code Online (Sandbox Code Playgroud)
Is there a way to make this serialization use JSON instead of YAML?
我想将一个对象序列化为XML,但我不想将它保存在磁盘上.我想将它保存在XElement变量中(用于LINQ),然后反序列化回我的对象.
我怎样才能做到这一点?
我正在为我的应用程序开发一个REST接口,使用Jackson将我的POJO域对象序列化为JSON表示.我想为某些类型自定义序列化,以便为POJO中不存在的JSON表示添加其他属性(例如,添加一些元数据,参考数据等).我知道如何编写自己的JsonSerializer,但在这种情况下,我需要为我的对象的每个属性显式调用JsonGenerator.writeXXX(..)方法,而我只需添加一个额外的属性.换句话说,我希望能够写出如下内容:
@Override
public void serialize(TaxonomyNode value, JsonGenerator jgen, SerializerProvider provider) {
jgen.writeStartObject();
jgen.writeAllFields(value); // <-- The method I'd like to have
jgen.writeObjectField("my_extra_field", "some data");
jgen.writeEndObject();
}
Run Code Online (Sandbox Code Playgroud)
或者(甚至更好)在jgen.writeEndObject()调用之前以某种方式拦截序列化,例如:
@Override void beforeEndObject(....) {
jgen.writeObjectField("my_extra_field", "some data");
}
Run Code Online (Sandbox Code Playgroud)
我以为我可以扩展BeanSerializer和覆盖它的serialize(..)方法,但是它被声明了final,而且我找不到一种简单的方法来创建一个新的实例BeanSerializer而不提供所有类型的元数据细节实际上复制了杰克逊的一部分.所以我放弃了这样做.
我的问题是 - 如何定制Jackson的序列化,为特定POJO的JSON输出添加额外的东西,而不会引入太多的样板代码并尽可能多地重用默认的Jackson行为.
我想创建一个包含我的类的实例变量的JSON字符串.
例如,
class Example {
std::string string;
std::map<std::string, std:string> map;
std::vector<int> vector;
};
Run Code Online (Sandbox Code Playgroud)
会成为:
{
"string":"the-string-value",
"map": {
"key1":"val1",
"key2":"val2"
},
"vector":[1,2,3,4]
}
Run Code Online (Sandbox Code Playgroud)
我已经研究了几个用于创建JSON的C++库,它们看起来都非常复杂.我想要类似于Javascript的东西JSON.stringify(object).换句话说,只需将std :: map传递给它并接收一个字符串.地图可以包含其他地图,矢量,列表,字符串,数字和布尔.
最好的方法是什么?
谢谢你的帮助.
编辑
我调查了以下内容:
json spirit,jsoncpp,zoolib,JOST,CAJUN,libjson,nosjob,JsonBox,jsonme--
据我所知,我可以构建一个单独的JSON对象,如下面的答案和转换为JSON我希望能够将我的东西存储在标准集合中并进行转换.
编辑2
好吧,废弃了序列化类的想法,因为看起来C++缺乏反射是不可能的.
有没有一种很好的方法将包含std:maps,std :: vectors,std :: lists,numbers,strings和bools的std :: map转换为JSON,而无需更改数据类型或将数据复制到新的数据类型?
谢谢.
serialization ×10
c# ×3
java ×3
json ×3
.net ×1
activerecord ×1
append ×1
c#-4.0 ×1
c++ ×1
form-submit ×1
forms ×1
jackson ×1
jquery ×1
json.net ×1
linq ×1
properties ×1
w3c ×1
xml ×1
yaml ×1