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

参考文档:

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

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

 

1、基本运作流程

l         基本要数:JSP+UJI TagsView)、HandlerController)、DataBeanModel),符合MVC模式

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

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

 

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" />

 

3DataBean

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标记指定DataBeanid属性值需要和main.jspuji:includepane属性值保持一致,cls属性指定DataBean类的全路径

l         uji:getProperty标记获得DataBean中指定属性值,bean属性与uji:useBeanid属性一致,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:指定DataBeanID,与下面直接指定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>
    
    

 

5Handler

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.jspuji:includepane属性值保持一致,第二个参数是响应页面的DataBean

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

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         对不需要迁移的页面,不指定迁移名称

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值