最近在做一个电子商务网站(
http://www.legendesign.net/
),暂时叫
LegendShop吧,网站支持多个商家发布产品,类似
于淘宝等商城,不同点在于
LegendShop的整个界面内容是可以自定义的,没有任何植入式的主网站的广告。
产品有一些固定属性,但是每个商家所销售的产品是不一样的,例如卖家具的有大小,颜色等,卖家电的有大小,品牌等。因此要为每个产品增加动态属性,商家在
建立产品的时候可以自定义该产品的属性。
思路是每个产品对应
0..n个动态属性,每个属性有
0..n个选项。
为了满足需求上要求,有些属性要求客户是直接填写的,有些是多选项,有些是要单选的。因此设计了
4中属性类型
Select(选择框)
, Text(文本框)
,
Radio(单选框)
, CheckBox(多选框)。
方法一:可以将以上实体定义为一个数据库表,每次读取产品的时候再装载动态属性,需要做表关联。此方法需要增加
2张表,但方便于采用
SQL做数据统计。
但每个产品都建立一次动态属性显然是没有必要而且很麻烦,因为相关的产品的动态属性是一致的,没有必要重复创建。
为了用户更容易增加动态属性,最好增加一个动态属性的模板,每次新建产品的时候直接指定采用那一个属性模板,但是模板一旦使用则不能轻易删除,否则动态属性就不见了。另外客户在订购的时候将填写或者选择这些动态属性,并将结果存入产品订购表。
方法二:采用对象数据库的方式,将动态属性以对象形式存到产品表中。此法不需要新建产品属性表和属性选项表,查询产品的时候可以直接把动态属性查询出来,但需要自己动手将对象和页面功能对应起来。
该字段可以直接存放
Java的对象,或者将对象转化为
JSON对象或者
XML再行存放。
如果采用
Oracle的话,那需要采用
BLOB的字段来存放对象,或者采用
CLOB来存放
JSON和
XML。下面用代码来展示如何实现方法二的。
属性类型定义:
public
enum
ModelType
{
Select
,
Text
,
Radio
,
CheckBox
;
}
属性定义:
public
class
Model
implements
Serializable {
private
String
id
;
/**
* may by select text radio checkbox
*/
private
ModelType
type
;
private
Item[]
items
; //
属性选项
选项定义:
public
class
Item
implements
Serializable {
private
boolean
nullEnabled
=
false
;
private
boolean
selected
=
false
;
private
String
key
=
null
; //
后台定义的选项关键字
private
String
value
=
null
; //
用户输入的属性值
界面说明:后台可以自定义上面提到的
4种属性类型。点击提交的时候通过
JSON将属性数组保存为产品表中的属性。当客户浏览产品的时候可以看到后台动态属性的定义,当然客户是不知道这些属性是动态增加的还是固定的。他们订购的时候选择对应的选项再提交,如果需要对选项做
validate的话,那在
Item中增加
needValidate属性,再页面中再行判断。
提交之后以
JSON方式交给
DWR处理,直接得到
Model[]数组。或者采用
DOM的方式得到
XML传到后台的
controller进行处理。下面的例子是采用
JSON的方式实现的。具体看附件。
DWR的配置文件,否则不能通过
DWR来传输对象。
<
dwr:configuration
>
<
dwr:init
>
<
dwr:converter
id
=
"date"
class
=
"bingo.vasms.bizstreet.dwr.CalendarConverter"
/>
</
dwr:init
>
<
dwr:convert
type
=
"date"
class
=
"java.util.Calendar"
></
dwr:convert
>
<
dwr:convert
type
=
"bean"
class
=
"com.done.entity.Model"
></
dwr:convert
>
<
dwr:convert
type
=
"bean"
class
=
"com.done.entity.Item"
></
dwr:convert
>
<
dwr:convert
type
=
"enum"
class
=
"com.done.entity.ModelType"
></
dwr:convert
>
</
dwr:configuration
>
- 大小: 6.6 KB
- 大小: 23.1 KB
分享到:
相关推荐
在实际应用中,静态属性也并非一成不变,会随着具体情况 的变化进行动态调整,不过其频率和范围较行为属性的变化要相对稳定。对银行客户来 说,典型的行为信息包括客户通过某一渠道访问或使用银行某一产品、服务的...
属性,如image的picfile属性即更换图片,text的content属性即文本内容。这种界面需求在界面开发中十分常见。 界面库高效性 DSkinLite与其他界面库相比有以下特点: 没有采用Hook所有进程消息的方式,因此没有替换...
动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个时间转换的问题,顺便谈谈搜索技巧 .net中的正则表达式使用高级技巧 (一) C#静态成员和...
• 动态监测 - 在测试执行过程中,实时获取并显示正在执行的各测试脚本的状态。 • 响应时间/吞吐量 - 测试对象针对特定主角和/或用例的响应时间或吞吐量的评测。 • 百分位报告 - 数据已收集值的百分位评测...
我们的Factory就是利用这种方式根据配置文件动态加载程序集,动态创建对象并设置属性的。有了这个Factory,MainApp中的内容就很简单了: using System; namespace IocInCSharp { public class MainApp { public ...
如果仅需要IIS 7.0支持静态内容,可直接选中“Internet信息服务”,如果希望 Web 服务器支持动态内容,则需展开“万维网服务”分支,将所需的选项全部选中; 点击“确定”,Windows Vista即启动IIS的安装过程; ...
•DefaultLobHandler:适用于大部分的数据库,如SqlServer,MySQL,对Oracle 10g也适用,但不适用于Oracle 9i(看来Oracle 9i确实是个怪胎,谁叫Oracle 公司自己都说Oracle 9i是一个过渡性的产品呢)。 •...
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.) select a,b,c from tablename ta where a=(select max(a) from ...
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.) select a,b,c from tablename ta where a=(select max(a) from ...
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.) select a,b,c from tablename ta where a=(select max(a) from ...
有近20年使用Oracle技术产品以及Oracle数据库管理员/Oracle数据库应用管理员的经验,是真正应用集群、性能调优以及数据库内部属性方面的专家。同时是一位演讲家及Oracle ACE。 JARED STILL 从1994年就开始使用...
内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...
内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...
内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...
内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...
内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...
内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...