Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Tapestry成对生成输入标记_Java_Forms_Textfield_Tapestry - Fatal编程技术网

Java Tapestry成对生成输入标记

Java Tapestry成对生成输入标记,java,forms,textfield,tapestry,Java,Forms,Textfield,Tapestry,我想生成HTML5有效文档,但Tapestry应用程序中的表单有问题。我正在使用tapestry文本字段,如下所示: <t:textfield t:id="specId" value="val" /> Tapestry生成html输入元素: <input id="specId" name="specId" type="text"></input> 但元素输入成对无效(带有结束标记),html验证器会大叫:“错误:错误的结束标记输入。” 是否有任何方

我想生成HTML5有效文档,但Tapestry应用程序中的表单有问题。我正在使用tapestry文本字段,如下所示:

<t:textfield t:id="specId" value="val" />

Tapestry生成html输入元素:

<input id="specId" name="specId" type="text"></input>

但元素输入成对无效(带有结束标记
),html验证器会大叫:“错误:错误的结束标记输入。”

是否有任何方法可以生成单一形式的输入标记,如

您可以使用自己的MarkupModel覆盖MarkupWriterFactory服务,该模型将缩写html5 void元素,而不是呈现结束标记

公共类HTML5 MarkupModel扩展了AbstractMarkupModel{
私有静态最终集VOID_ELEMENTS=新哈希集(Arrays.asList(
“区域”、“基础”、“br”、“col”、“命令”、“嵌入”、“hr”、“img”、“输入”、“键根”、“链接”、“元”、“参数”、“源”、“跟踪”、“wbr”
));
公共HTML5标记模型(布尔值使用撇号表示属性){
super(在属性中使用撇号);
}
公共EndTagStyle getEndTagStyle(字符串元素){
返回VOID_ELEMENTS.contains(element)?EndTagStyle.缩写:EndTagStyle.REQUIRE;
}
公共布尔值isXML(){
返回false;
}
}
公共类HTML5 MarkupWriterFactory实现MarkupWriterFactory{
私有最终页面内容类型分析器;
私有最终请求页面缓存;
私有最终MarkupModel htmlModel=新的HTML5 MarkupModel(false);
私有最终MarkupModel htmlPartialModel=新的HTML5 MarkupModel(真);
私有最终MarkupModel xmlModel=新的XMLMarkupModel();
私有最终MarkupModel xmlPartialModel=新的XMLMarkupModel(真);
公共HTML5 MarkupWriterFactory(PageContentTypeAnalyzer分析器、RequestPageCache缓存){
this.analyzer=分析器;
this.cache=cache;
}
公共MarkupWriter newMarkupWriter(ContentType ContentType){
返回newMarkupWriter(contentType,false);
}
公共标记编写器newPartialMarkupWriter(ContentType ContentType){
返回newMarkupWriter(contentType,true);
}
公共MarkupWriter newMarkupWriter(字符串pageName){
返回newMarkupWriter(analyzer.findContentType(cache.get(pageName));
}
私有MarkupWriter newMarkupWriter(ContentType ContentType,布尔部分){
布尔值isHTML=contentType.getMimeType().equalsIgnoreCase(“text/html”);
MarkupModel模型=部分
?(isHTML?htmlPartialModel:xmlPartialModel)
:(isHTML?htmlModel:xmlModel);
//charset参数设置XML声明的编码属性(如果需要)
//如果使用XML模型,则不为null。
返回新的MarkupWriterImpl(model,contentType.getCharset());
}
}
和服务覆盖贡献:

@Contribute(ServiceOverride.class)
public void contributeServiceOverrides(映射配置,
对象定位器(ObjectLocator){
//使用代理而不是真实的服务实例
//在初始化周期中防止递归
添加(MarkupWriterFactory.class,
代理(MarkupWriterFactory.class,HTML5 MarkupWriterFactory.class));
}

您使用什么版本的Tapestry?我使用最新版本(5.3.7),得到的结果相同,但没有结束标记。Nathan post在5.4版本中修复了该漏洞(在5.3.6版本中修复了受影响的版本)。显然我需要增加我的Tapestry版本。谢谢你们两位的回答!我认为5.4还没有发布。但是最近发布的5.3.7版本似乎已经被修正了。是的,我想你是对的。我将尝试5.3.7版本。谢谢