2010-01-18 75 views
14

是否可以为MarkupContainer动态生成标记,即不为其存储HTML文件?Wicket中的动态标记

我曾想过将标记作为数据库中的纯字符串读取,以提供类似CMS的功能。

+0

太棒了!我将使用JTexy轻量级标记语言(http://code.google.com/p/jtexy/)。 – 2010-01-23 03:54:04

回答

9

有趣的问题,我不确定是否有可能,但我的猜测是开始寻找IMarkupLoaderIMarkupResourceStreamProvider接口和实现类,并看看你有多远。
我会对任何你找到/实现的东西感兴趣,它实际上完成了!

+4

感谢您的提示。那样做了! MarkupContainer必须实现'IMarkupResourceStreamProvider'及其方法'getMarkupResourceStream()'。此外,您还创建了一个从“AbstractResourceStream”派生(例如)的类。在那里,你可以实现一个只返回一个'InputStream'的方法。 'getMarkupResourceStream()'然后只返回这个新类的一个实例。 javadoc说这对缓存甚至是透明的。 – Wolfgang 2010-01-18 15:38:19

+1

这在参考指南[17.5从代码生成HTML标记](http://wicket.apache.org/guide/guide/advanced.html#advanced_5)中有详细记录。 – aioobe 2015-01-17 22:32:49

-1

另一个(简单)的方式来做到这一点是使用一个标签有残疾的标记转义:

Label<String> label = new Label<String>("id", "<a href='....'><span>foo<em>bar</em></span></a>"); 
label.setEscapeModelStrings(false); 
add(label); 

不过要小心,因为这可能会导致安全漏洞(HTML/JS注射)。

+0

感谢您的想法。不过,我不确定这是我寻找的。我想使用动态标记来使用MarkupContainer,也就是我期望在标记中使用某些标记:ids,并且我希望将更多的组件添加到容器中,然后将其映射到这些ID。恐怕您的解决方案无法实现。 – Wolfgang 2010-01-23 11:44:04

+0

是的,你是对的,我的不好。 – Jawher 2010-01-26 07:42:29

+0

这是一个非常糟糕的主意,考虑到安全漏洞,而且滥用标签来显示纯HTML。 – RobAu 2013-06-17 13:04:00