分享
 
 
 

富士通Interstage平台Apcoordinator(APC) Web应用程序开发

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

参考文档:

l A.1 簡単なサンプル:/APC/manual/guide/guideaa/guide291.htm

l UJI标记参考:/APC/manual/tag/index.html

1、基本运作流程

l 基本要数:JSP+UJI Tags(View)、Handler(Controller)、DataBean(Model),符合MVC模式

l 推荐原则:一个画面对应1个JSP页面、1个Handler和1个DataBean

l 如果共用Handler或DataBean(如样例中情况),容易出现逻辑混乱,不利于开发维护

2、控制页main.jsp

<HTML>

<HEAD>

<TITLE>sample</TITLE>

<%@ page contentType= "text/html; charset=shift_jis" %>

<%@ taglib uri="uji-taglib" prefix="uji" %>

</HEAD>

<BODY>

<uji:dispatch />

<uji:include pane="head" />

<uji:include pane="body" />

</BODY>

</HTML>

l APC应用程序从main.jsp开始执行

l uji:include标记包含页面头和页面体两个部分

l 对于不需要页面头的APC应用程序,去掉<uji:include pane="head" />

3、DataBean

l HeadBean.java

package sample;

public class HeadBean extends com.fujitsu.uji.DataBean

{

protected int count;

protected java.util.Date loginTime;

public int getCount() {

return count;

}

public void setCount(int count) {

this.count = count;

}

public java.util.Date getLoginTime() {

return loginTime;

}

public void setLoginTime(java.util.Date loginTime) {

this.loginTime = loginTime;

}

}

l BodyBean.java

package sample;

public class BodyBean extends com.fujitsu.uji.DataBean

{

protected String message;

protected double val1;

protected double val2;

protected double result;

public String getMessage() {

return message;

}

public void setMessage(String message) {

this.message = message;

}

public double getVal1() {

return val1;

}

public void setVal1(double val1) {

this.val1 = val1;

}

public double getVal2() {

return val2;

}

public void setVal2(double val2) {

this.val2 = val2;

}

public double getResult() {

return result;

}

public void setResult(double result) {

this.result = result;

}

}

l DataBean是标准的JavaBean,需要扩展com.fujitsu.uji.DataBean

l DataBean中属性与画面项目定义书中的项目一致

l 子DataBean的使用:对于画面中有条目列表的情况,使用子DataBean表示一条条目,通过list结构子DataBean的表示整个条目列表,并作为父DataBean的一个属性

4、入出力页面

l header.jsp

<%@ page contentType="text/html; charset=shift_jis" %>

<%@ taglib uri="uji-taglib" prefix="uji" %>

<uji:useBean id="head" cls="sample.HeadBean" request="true" />

実行回数は

<uji:getProperty bean="head" property="count" /> 回です。 <BR>

セションを開始した時間は

<uji:getProperty bean="head" property="loginTime" /> です。 <BR>

<HR><BR>

l uji:useBean标记指定DataBean,id属性值需要和main.jsp中uji:include的pane属性值保持一致,cls属性指定DataBean类的全路径

l uji:getProperty标记获得DataBean中指定属性值,bean属性与uji:useBean的id属性一致,property属性指定DataBean中的属性

l request.jsp

<%@ page contentType="text/html; charset=shift_jis" %>

<%@ taglib uri="uji-taglib" prefix="uji" %>

<uji:useBean id="body" cls="sample.BodyBean" request="true" />

サンプルプログラムでは、2項の加減算を実行します。

<FORM method="post">

<INPUT name="uji.verbs" type="hidden" value="add,sub">

<INPUT name="uji.id" type="hidden" value="body">

値1の入力: <INPUT name="val1"> <BR>

値2の入力: <INPUT name="val2"> <BR>

<INPUT name="add" type="submit" value="加算">

<INPUT name="sub" type="submit" value="減算">

</FORM>

l 对于表单处理,需要提供几个特殊的隐藏值:

Ø uji.verbs:指定逗号分隔的动作(按钮、链接等)命令列表(参看后面的commands.map)

Ø uji.id:指定DataBean的ID,与下面直接指定DataBean的语句是等效的

<INPUT name="uji.bean" type="hidden" value="sample.BodyBean">

l 文本框的name属性要和DataBean中对应的属性名相同,以便能够将输入的值自动设置到DataBean中对应的属性

l 实际应用中通常使用uji:fieldString来表示文本框:

<uji:fieldString bean="body" name="val1">

l 提交按钮的name属性值要和uji.verbs的命令列表中的值保持一致,以便能够执行相应的动作

l 样例中没有涉及数据验证的情况,对于实际应用中需要数据验证的情况,需要使用JavaScript进行处理(这里,按钮的name属性值不一定要和uji.verbs的命令列表中的值保持一致):

Ø 添加uji.verb隐藏表单域

<INPUT name="uji.verb" type="hidden" value=" ">

Ø 将提交按钮改为普通按钮,通过Click事件进行处理

<INPUT name="add" type="button" value="加算" onClick="add()" >

Ø 在处理函数中设置当前动作命令,提交表单

function add() {

// ... 进行验证,失败就返回

document.forms[0].elements["uji.verb"].value="add";

document.forms[0],submit();

}

l response.jsp

<%@ page contentType="text/html; charset=shift_jis" %>

<%@ taglib uri="uji-taglib" prefix="uji" %>

<uji:useBean id="body" cls="sample.BodyBean" request="true" />

<uji:getProperty bean="body" property="message" /><BR>

<uji:getProperty bean="body" property="val1" />と

<uji:getProperty bean="body" property="val2" />の計算結果は<BR>

<uji:getProperty bean="body" property="result" />です。<BR>

<FORM method="post">

<INPUT name="uji.verbs" type="hidden" value="next">

<INPUT name="uji.id" type="hidden" value="body">

<INPUT name="next" type="submit" value="入力に戻る">

</FORM>

5、Handler类

package sample;

import com.fujitsu.uji.DispatchContext;

public class SampleHandler extends com.fujitsu.uji.GenericHandler

{

public SampleHandler() {

}

public boolean init() {

return true;

}

public void add(DispatchContext context, BodyBean dataBean) {

double result = dataBean.getVal1() + dataBean.getVal2();

dataBean.setMessage("加算を実行しました。");

dataBean.setResult(result);

dataBean.setVerb("resmode");

context.setResponseBean("body", dataBean);

setHead(context);

}

public void sub(DispatchContext context, BodyBean dataBean) {

double result = dataBean.getVal1() - dataBean.getVal2();

dataBean.setMessage("減算を実行しました。");

dataBean.setResult(result);

dataBean.setVerb("resmode");

context.setResponseBean("body", dataBean);

setHead(context);

}

public void next(DispatchContext context, BodyBean dataBean) {

dataBean.setVerb("reqmode");

context.setResponseBean("body", dataBean);

setHead(context);

}

public void startup(DispatchContext context) {

BodyBean dataBean = new BodyBean();

dataBean.setVerb("reqmode");

context.setResponseBean("body", dataBean);

setHead(context);

}

private HeadBean headBean;

private void setHead(DispatchContext context) {

if(headBean == null) {

headBean = new HeadBean();

headBean.setLoginTime(new java.util.Date());

}

headBean.setCount(headBean.getCount() + 1);

context.setResponseBean("head", headBean);

}

}

l Handler类扩展com.fujitsu.uji.GenericHandler,主要包含与动作命令对应的处理方法(在commands.map中定义)

l 处理方法通常有两个参数:

Ø context:上下文环境变量对象

Ø dataBean:当前Handler对应的DataBean对象

l 使用传递的DataBean对象,可以对DataBean中的数据进行存取操作(getter/setter)

l dataBean.setVerb()方法指定画面的迁移(具体在pages.map中定义)

l context.setResponseBean()方法指定响应页面的DataBean,第一个参数要和main.jsp中uji:include的pane属性值保持一致,第二个参数是响应页面的DataBean

l 样例中由于使用同一个Handler和DataBean,在逻辑控制方面会产生混乱,不值得推荐

l 下面给出的实际应用中使用的例子:0115Handler中从0115画面迁移到0110画面的方法

public void goto_0110(DispatchContext context, eft_0115Bean dataBean) {

...

eft_0110Bean eft0110Bean = new eft_0110Bean();

eft0110Bean.setLdc(dataBean.getLdc());

eft0110Bean.setVerb("resmode");

context.setResponseBean("body", eft0110Bean);

}

l startup()是个特殊方法,根据commands.map中的定义,会在应用程序启动时被调用,以显示指定的首画面

6、关系定义文件

l commands.map

# commands.map

sample.BodyBean;add=sample.SampleHandler.add

sample.BodyBean;sub=sample.SampleHandler.sub

sample.BodyBean;next=sample.SampleHandler.next

;=sample.SampleHandler.startup

l commands.map的行格式是:DataBean全路径;动作命令名称=Handler全路径.方法名

l 最后一行比较特殊,指定应用程序启动时被调用对应Handler的方法,没有DataBean全路径和动作命令名称

l pages.map

# pages.map

sample.HeadBean;=header.jsp

sample.BodyBean;reqmode=request.jsp

sample.BodyBean;resmode=response.jsp

l pages.map的行格式是:DataBean全路径;[迁移名称]=迁移页面

l 对不需要迁移的页面,不指定迁移名称

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有