资源描述
单击此处编辑母版标题样式,第一级,第二级,第三级,第四级,1,home back,first prev,next last,学习目标,掌握通过代码动态生成页面的技术,学习目标掌握通过代码动态生成页面的技术,任务背景,4-1,你们项目组现在负责开发一个在线测验系统,你负责测验页面的生成任务。,项目经理告诉你:,在线测验只包含迭择题,包抱单项迭择和多项选择。,另外,判断题也可以看作是仅有两个选项的选择题。,本任务棘手之处在于,每道题目的选项个数是不同的,而且单选多选所用页面项也不同。因此,你不可能事先通过向导将页面项摆放好,页面内容要由程序根据数据库内容动态生成,任务背景 4-1你们项目组现在负责开发一个在线测验系统,你负,任务背景,4-2,项目经理告诉你:,数据库已经设计完成,你会得到相关的数据表创建脚本以及相关,ERD,你的任务是生成一页面,显示所有试题及选项,允许用户进行选择,提交后,将用户选择写入对应数据表中,页面生成后,应进行必要的测试,确保代码的质量,任务背景 4-2项目经理告诉你:,任务背景,4-3,项目经理告诉你:,你应当首先研究一下下面的技术,htp.p(,在线测验,);,可以向用户页面输出,HTML,内容,标签,在页面中可通过表格控制输出格式,APEX_ITEM.RADIOGROUP,过程可在页面显示单选按钮组,APEX_ITEM.CHECKBOX,过程可在页面显示复选按钮组,任务背景 4-3项目经理告诉你:,任务背景,4-4,项目经理告诉你:,你应当编写易维护、结构化的代码,通过子程序完成相对独立的功能,比如:,-,判断试题是否为单项选择,FUNCTION t02_is_single_option(p_question_id IN NUMBER)RETURN BOOLEAN;,-,显示一道试题,PROCEDURE t02_show_a_question(p_question_id IN NUMBER,p_ques_body IN VARCHAR2);,任务背景 4-4项目经理告诉你:,相关资料,2-1,数据表创建脚本,quiz_sql.txt,相关,ERD,选项,#,编号,o,选项内容,o,正确选项标志,试题,#,编号,o,题目要求,拥有,属于,选择结果,#,编号,o,是否选择标志,属于,拥有,相关资料 2-1数据表创建脚本选项试题拥有属于选择结果属于拥,相关资料,2-2,界面参考,你最后生成的页面可参考右图,相关资料 2-2界面参考,构建,13-1,创建应用程序,输入名称,构建 13-1创建应用程序,构建,13-2,创建应用程序,添加空白页,构建 13-2创建应用程序 添加空白页,构建,13-3,创建应用程序,No tabs and No Authentication,构建 13-3创建应用程序,构建,13-4,页面,1,添加,PL/SQL,动态区域,构建 13-4页面1添加 PL/SQL 动态区域,构建,13-5,页面,1,添加,PL/SQL,动态区域,Title,输入“在线测验”,PL/SQL Source:,输入,BEGIN,null;,END;,创建区域,构建 13-5页面1添加 PL/SQL 动态区域,构建,13-6,修改,PL/SQL,动态区域代码为,test_01,运行页,1,,结果如右图,这是测试如何动态生成页面的基本技术,即动态用程序拼成,HTML,代码,下面准备用数据库里测验试题取代上例中的固定文本,构建 13-6修改PL/SQL 动态区域代码为,构建,13-7,修改,PL/SQL,动态区域代码为,test_02,运行页,1,,结果如右图,这是测试如何用动态页面显示数据库内容的基本技术,游标嵌套是常用技术,下面准备显示选择按钮,构建 13-7修改PL/SQL 动态区域代码为,构建,13-8,创建函数,t02_is_single_option,此函数用于判断试题是单选还是复选,修改,PL/SQL,动态区域代码为,test_03,运行页,1,,结果如右图,此处关键代码在于,APEX_ITEM.,CHECKBOX,APEX_ITEM.RADIOGROUP,构建 13-8创建函数,构建,13-9,创建提交按钮,选择按钮所在区域,构建 13-9创建提交按钮,构建,13-10,创建提交按钮,选择按钮在区域中的位置,构建 13-10创建提交按钮,构建,13-11,创建提交按钮,选择,submit,修改,Label,构建 13-11创建提交按钮,构建,13-12,创建提交按钮,选择提交后转到哪个页面,其它选项默认即可,构建 13-12创建提交按钮,构建,13-13,为按钮增加,PL/SQL,类型的处理,创建过程,t02_write_selected_answers,处理代码为,test_04,测试,选择正确答案并提交,执行,select*from t02_answer_history;,结果如下,构建 13-13为按钮增加 PL/SQL 类型的处理,问题,每页最多能显示多少道试题?为什么?,问题每页最多能显示多少道试题?为什么?,APEX_ITEM.,CHECKBOX 5-1,CHECKBOX Function,This function creates check boxes.Syntax:,APEX_ITEM.CHECKBOX(,p_idx IN NUMBER,p_value IN VARCHAR2 DEFAULT,p_attributes IN VARCHAR2 DEFAULT,p_checked_values IN VARCHAR2 DEFAULT,p_checked_values_delimiter IN VARCHAR2 DEFAULT),RETURN VARCHAR2;,参见,Users Guide_e10499.pdf Page 15-68,APEX_ITEM.CHECKBOX 5-1CHECKBOX,APEX_ITEM.,CHECKBOX 5-2,CHECKBOX,函数参数含义见下表,APEX_ITEM.CHECKBOX 5-2CHECKBOX,APEX_ITEM.,CHECKBOX 5-3,Examples of Default Check Box Behavior,The following example demonstrates how to create a selected check box for each employee in the emp table.,SELECT APEX_ITEM.CHECKBOX(1,empno,CHECKED,),ename,job,FROM emp,ORDER BY 1,The following example demonstrates how to have all check boxes for employees display without being selected.,SELECT APEX_ITEM.CHECKBOX(1,empno),ename,job,FROM emp,ORDER BY 1,APEX_ITEM.CHECKBOX 5-3Examples,APEX_ITEM.,CHECKBOX 5-4,Creating an On-Submit Process,If you are using check boxes in your application,you might need to create an OnSubmit process to perform a specific type of action on the selected rows.,For example,you could have a Delete button that utilizes the following logic:,SELECT APEX_ITEM.CHECKBOX(1,empno),ename,job,FROM emp,ORDER by 1,Consider the following sample on-submit process:,FOR I in 1.APEX_APPLICATION.G_F01.COUNT LOOP,DELETE FROM emp WHERE empno=to_number(APEX_APPLICATION.G_F01(i);,END LOOP;,APEX_ITEM.CHECKBOX 5-4Creating,APEX_ITEM.,CHECKBOX 5-5,解释,有,50,个预先定义好的全局变量,,G_F01,到,G_F50,,每个变量相当于一个数组,其,count,方法可返回数组内元素个数,一组,CHECKBOX,通过,p_idx,参数和一个全局变量关联,每个选项应指定唯一标识值,p_value,用户选择并提交页面后,对应全局变量中将记录用户选中选项的,p_value,值,P_attributes,参数为,checked,的选择默认为选中状态,APEX_ITEM.CHECKBOX 5-5 返,APEX_ITEM.RADIOGROUP 4-1,RADIOGROUP Function,This function generates a radio group from a SQL query.Syntax,:,APEX_ITEM.RADIOGROUP(,p_idx IN NUMBER,p_value IN VARCHAR2 DEFAULT,p_selected_value IN VARCHAR2 DEFAULT,p_display IN VARCHAR2 DEFAULT,p_attributes IN VARCHAR2 DEFAULT,p_onblur IN VARCHAR2 DEFAULT,p_onchange IN VARCHAR2 DEFAULT,p_onfocus IN VARCHAR2 DEFAULT),RETURN VARCHAR2;,APEX_ITEM.RADIOGROUP 4-1RADIOG,APEX_ITEM.RADIOGROUP 4-2,RADIOGROUP,参数含义见下表,APEX_ITEM.RADIOGROUP 4-2RADIOG,APEX_ITEM.RADIOGROUP 4-3,Example,The following example demonstrates how to select department 20 from the emp table as a default in a radio group.,SELECT APEX_ITEM.RADIOGROUP(1,deptno,20,dname)dt,FROM dept,ORDER BY 1,APEX_ITEM.RADIOGROUP 4-3Exampl,APEX_ITEM.RADIOGROUP 4-4,解释,同,CHECKBOX,函数类似,一个单选按钮组 通过,p_idx,参数和一个全局变量关联,每个选项应指定唯一标识值,p_value,p_selected_value,参数为默认为选中状态选项的标识值即,p_value,用户选择并提交页面后,对应全局变量中将记录用户选中选项的,p_value,值,APEX_ITEM.RADIOGROUP 4-4 返,
展开阅读全文