首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

懂得cppcms中的form

2012-06-29 
理解cppcms中的form问题:cppcms中form如何使用呢?官网上,除了教学篇-5之外,再无其他关于form使用的帮助文

理解cppcms中的form

问题:

cppcms中form如何使用呢?官网上,除了教学篇-5之外,再无其他关于form使用的帮助文档了。当然,还有另外两种办法,就是看reference api文档和源代码。但是每次在使用form之前,或者长时间不用cppcms都使用后面两种办法自学的话,真是有点费劲费时。

?

小结:

基于上述问题原因,做了下面cppcms中form的小结,以便后续使用。

?

还是先看教学篇5的源代码,先看content.h。

?照常例,使用cppcms时,都先准备content,同样我们定义一个message struct,template被填充message中的成员变量值。正如教学篇5中,页面只有一个简单的form,里面包含姓名(text)、性别(radio)、婚姻状况(select)、age(text),提交按钮(submit)五个form组件。

?

按照传统HTML页面来讲,当客户提交表单时,表单中信息均保存在http request中POST数组变量中。在cppcms中,我们可以通过使用http_request的post(std::string const &name)读取这些原始数据。以下,是我使用CPPCMS按照传统方式编写的一个简单表单交互测试。

?

1. 定义content.h

?3. 编写controller,base_form.cpp

根据上述测试,不免有很多麻烦之处,比如在template中编写表单,在controller应用程序中,需要对表单的变量逐一进行解析。上述测试中,还没有加对表单数据的验证等。总之,编写起来比较繁琐。

不过,cppcms作者设计和实现了form的相关工具集用以解决传统表单交互的麻烦。

1. 在template中编写表单 —— 在cppcms template系统中定义了直接将form数据(model)转换成form视图(View)的构件(<% form as_p info %>),并且可以按照不同html_list_type方式形成不同类型的view.

2. 在content(model)中, 直接通过C++语言定义form表单,并且通过base_widgets类包包装了传统form的基础构件。其中新添加了numeric<T>组件,用以编制收集用户在表单输入数值,减少不必要的cast。另外,通过包装的widgets,还可以在此基础上,对用户录入数据进行验证。

3. widgets包装的每个form组件,都实现了load接口函数(纯虚函数,定义在base_form类中),这样用户只需要轻松调用load函数,实现request中表单数据的解析。

4. 通过form.h,即可看出cppcms眼中的form。一个form可以由多个sub-form组成,每个form都是由若干widget组成的。

因此,针对这样复杂的form,作者还提供了STL风格的form iterator,是不是很人性化啊。

?

热点排行