发明内容
为了在不同场景下,快速、方便地生成多种不同的Facelets页面,满足对Facelets页面的多种需求,本发明实施例提供了一种生成Facelets页面的方法和装置,所述技术方案如下:
一方面,本发明实施例提供了一种生成Facelets页面的方法,所述方法包括:
接收对Facelets页面的第一请求,根据所述第一请求携带的路径获取所述路径对应Facelets模板,所述第一请求为携带的路径的后缀为*.dfaces的请求;
根据所述Facelets模板、业务条件生成Facelets页面;
获取第二请求,根据第二请求、Facelets页面,进行JSF处理,构造JSF应用所需的构件树;
根据构造的构件树生成代码,并将代码发送至浏览器终端。
在根据所述第一请求携带的路径获取所述路径对应的Facelets模板的步骤之前,包括:
建立所述第一请求携带的路径与所述Facelets模板之间的对应关系。
所述根据所述Facelets模板、业务条件生成Facelets页面,包括:
将所述业务条件直接写入到所述Facelets模板中,生成所述Facelets页面。
所述根据所述Facelets模板、业务条件生成Facelets页面,还包括:
根据所述业务条件设置所对应的参数,将所述参数写入到所述Facelets模板中,生成所述Facelets页面。
再一方面,本发明实施例提供了一种生成Facelets页面的装置,所述装置包括:
接收模块,用于接收对Facelets页面的第一请求,所述第一请求为携带的路径的后缀为*.dfaces的请求;
获取模块,用于根据所述接收模块接收到的所述第一请求中携带的路径获取所述路径对应的Facelets模板;
生成模块,用于根据所述Facelets模板、业务条件生成Facelets页面;
构建模块,用于获取第二请求,根据第二请求、Facelets页面,进行JSF处理,构造JSF应用所需的构件树;
发送模块,用于根据构造的构件树生成代码,并将代码发送至浏览器终端。
所述装置,还包括:
建立模块,用于在根据所述第一请求携带的路径获取所述路径对应的Facelets模板之前,建立所述第一请求携带的路径与所述Facelets模板之间的对应关系。
所述生成模块,包括:
第一生成单元,用于将所述业务条件直接写入到所述Facelets模板中,生成所述Facelets页面。
所述生成模块,还包括:
第二生成单元,用于根据所述业务条件设置所对应的参数,将所述参数写入到所述Facelets模板中,生成所述Facelets页面。
本发明实施例提供的技术方案的有益效果是:
通过接收客户端对Facelets页面的第一请求,根据第一请求中携带的路径获取对应的Facelets模板;根据Facelets模板、不同的业务条件,生成Facelets页面。通过上述方案实现了当业务条件不同时可以快速、方便地生成多种不同的Facelets页面,满足了对Facelets页面的多种需求。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例1
为了快速、方便地生成多种不同的Facelets页面,满足对Facelets页面的多种需求,本发明实施例提供了一种生成Facelets页面的方法,参见图1,该方法内容如下:
101:接收对Facelets页面的第一请求,根据第一请求携带的路径获取路径对应Facelets模板;
102:根据Facelets模板、业务条件生成Facelets页面。
进一步地,在根据第一请求携带的路径获取路径对应的facelets模板的步骤之前,包括:
建立第一请求携带的路径与Facelets模板之间的对应关系。
进一步地,根据Facelets模板、业务条件生成Facelets页面,包括:
将业务条件直接写入到Facelets模板中,生成Facelets页面。
进一步地,根据Facelets模板、业务条件生成Facelets页面,还包括:
根据业务条件设置所对应的参数,将参数写入到Facelets模板中,生成Facelets页面。
综上所述,本发明实施例提供了一种生成Facelets页面的方法,通过接收对Facelets页面的第一请求,根据第一请求中携带的路径获取对应的Facelets模板;根据Facelets模板、不同的业务条件,生成Facelets页面。通过上述方法实现了当业务条件不同时可以快速、方便地生成多种不同的Facelets页面,满足了对Facelets页面的多种需求。
为了对上述本发明实施例提供的方法进行详细说明,请参见如下实施例:
实施例2
为了快速、方便地生成多种不同的Facelets页面,提高用户的使用体验,本发明实施例提供了一种生成Facelets页面的方法,参见图2,该方法内容如下:
201:服务器终端获取客户端对动态Facelets页面的第一请求;
例如:客户端在浏览器地址栏中输入网页地址,这时浏览器会向web服务器发送请求该网页地址对应的页面的请求,例如:在浏览器地址栏中输入的网页地址为:http://www.operamasks.org/article/static/ART00098.html,其中,/article/static/ART00098.html为请求的路径。服务器终端获取浏览器发送的对动态Facelets页面的第一请求,即获取路径后缀为*.dfaces的请求,如/company.dfaces、/test2.dfaces、/error/test.dfaces等路径。
202:服务器终端根据第一请求中的路径获取路径所对应的Facelets模板;
具体地,Facelets模板有多个,在配置文件时建立装载的Facelets模板与请求路径之间的对应关系,比如请求路径为/module/list.dfaces,则需要装载的模板为/module/list.dxhtml,如果请求路径为/module/edit.dfaces,则相应地装载的模板为/module/edit.dxhtml,为此用户可以根据请求中的路径获取到路径所对应的Facelets模板。
203:服务器终端根据Facelets模板、业务条件、通过模版引擎生成Facelets页面;
模板系统可以有多个,例如:freemaker、commontemplate、smarttemplate等,每个模板系统只能独立地使用,不能几个模板系统混用,如配置使用A模板系统就不使用B模板系统,配置使用B模板系统不能使用A模板系统。服务器终端将Facelets模板装载进模板系统中,可以直接将业务条件直接写入到Facelets模板中,生成Facelets页面;或根据不同的业务条件将不同的参数写入到Facelets模板的上下文中,Facelets模板的上下文可以作为存放参数的容器,本发明实施例以第二种方式为例进行说明,具体实现时,本发明实施例对此不做限制。例如:一个公司部门的个数可以作为一个业务条件,当部门个数大于5时,设置的参数为:companySize=big,当部门个数小于等于5时,设置的参数为:companySize=small,在模板上下文中可以写出如下的代码:
{if companySize=“big”}
<h:outputLabel value=“这是一个大公司”></h:outputLabel>
{else}
<h:outputLabel value=“这是一个小公司”></h:outputLabel>
{end if}
当部门个数为6时,放入的参数为companySize=big,最终将生成<h:outputLabel value=“这是一个大公司”></h:outputLabel>的Facelets页面。针对模板出错时,模版系统本身会有出错提示,比如在模板文件中引用了一个变量companySize,如下面的代码:
{if companySize=“big”}
<h:outputLabel value=“这是一个大公司”></h:outputLabel>
{else}
<h:outputLabel value=“这是一个小公司”></h:outputLabel>
{end if}
但在实际操作中忘记了根据业务条件将companySize这个参数写入到Facelets模板的上下文中,则根据模板生成Facelets页面时将会报错,会给出如下的出错提示:
companySize未定义位置list.dxhtml,第20行。
上述这句话表明了出错原因是companySize未定义,出错位置位于list.dxhtml这个模板文件中第20行,开发人员看见这种错误提示,就很容易定位错误。通过采用模版系统,使得生成的Facelets页面直观、使用方便,如若出错,可以及时的进行排错,提高了效率。
204:服务器终端获取客户端发送的第二请求,根据第二请求、Facelets页面,进行JSF处理,构造JSF应用所需的构件树;
由于第一请求生成完第一Facelets页面后,无法继续调用JSF,这时,服务器终端就需要客户端发送一第二请求,该第二请求具体为前缀和第一请求相同,后缀为.faces的网页地址,参见步骤201,此时客户端在浏览器地址栏中输入的网页地址为http://www.operamasks.org/article/static/ART00098.faces,当服务器终端获取到该网页地址后,根据Facelets页面进行JSF处理。
具体地,对Facelets页面进行JSF处理包括:通过Facelets框架将标签转化成组件,并拼接成组件树形结构,以构造出JSF应用所需的构件树。例如:将<h:outputLabel这个标签转化成组件,Facelet s框架会将<h:outputLabel>这个标签转化成名为UIOutputLabel的组件,整个Facelets页面中各个标签都被转化为各种各样的组件,然后按最初的父子关系拼接成组件的树型结构。
205:服务器终端根据构造的构件树生成代码,并将代码发送至浏览器终端;
具体地,上述生成的代码可以为html代码、xml代码等其他代码,具体实现时,本发明实施例对此不做限制。
206:浏览器终端接收服务器终端发送的代码,并根据代码生成向用户展示的页面。
上述将代码转化为向用户展示的页面具体包括:首先将代码转化为文字、声音、图片、链接等一系列用户可见的元素,其次将上述元素组合成向用户展示的页面。
综上所述,本发明实施例提供了一种生成Facelets页面的方法,通过接收到客户端对Facelets页面的第一请求,根据第一请求中携带的路径获取对应的Facelets模板;根据Facelets模板、不同的业务条件,通过模板引擎生成Facelets页面,通过Facelets页面,生成展示给用户的页面。通过上述方法实现了当业务条件不同时可以快速、方便地生成多种不同的Facelets页面,满足了对Facelets页面的多种需求;并通过模板系统可以直观的获取到程序中存在的错误,易于排错,节省了时间,提高了开发的效率,满足了实际应用中的需要。
实施例3
本发明实施例提供了一种生成Facelets页面的装置,参见图3,该装置包括:
接收模块301,用于接收对Facelets页面的第一请求;
获取模块302,用于根据接收模块接收到的第一请求中携带的路径获取路径对应的Facelets模板;
生成模块303,用于根据Facelets模板、业务条件生成Facelets页面。
进一步地,参见图4,该装置,还包括:
建立模块304,用于在根据第一请求携带的路径获取路径对应的Facelets模板之前,建立第一请求携带的路径与Facelets模板之间的对应关系。
进一步地,参见图5,生成模块303,包括:
第一生成单元303A,用于将业务条件直接写入到Facelets模板中,生成Facelets页面。
进一步地,参见图6,生成模块303,还包括:
第二生成单元303B,用于根据业务条件设置所对应的参数,将参数写入到Facelets模板中,生成Facelets页面。
综上所述,本发明实施例提供了一种生成Facelets页面的装置,通过接收对Facelets页面的第一请求,根据第一请求中携带的路径获取对应的Facelets模板;根据Facelets模板、不同的业务条件、模板引擎生成Facelets页面。通过上述装置实现了当业务条件不同时可以快速、方便地生成多种不同的Facelets页面,满足了对Facelets页面的多种需求。
本发明实施例中的“接收”一词可以理解为主动从其他模块获取也可以是接收其他模块发送来的信息。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本发明实施例中的部分步骤,可以利用软件实现,相应的软件程序可以存储在可读取的存储介质中,如光盘或硬盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。