|
添加新的根 bean 封装器
ValidCodesServiceRoot.java 文件包含了计划命名空间 URI 的注册,用于有效代码服务的属性和它的获取/设置方法。通过调用这些有效的代码服务来慢慢地装载所有有效的代码。在 brokerservice.root 包中添加 ValidCodesServiceRoot.java Java 类:
package brokerservice.root;
import org.eclipse.emf.ecore.EPackage;
import proxy.ValidCodesServiceProxy;
import xyz.validcodesservice.DocumentRoot;
import xyz.validcodesservice.ValidCodesServiceType;
import xyz.validcodesservice.ValidcodesservicePackage;
import dw.ibm.etools.xsd.sdo.xmltransformservice.XMLTransformServiceFactory;
public class ValidCodesServiceRoot extends BaseRoot{
protected ValidCodesServiceType validCodesServiceRoot;
static{
EPackage.Registry.INSTANCE.put(
ValidcodesservicePackage.eINSTANCE.getNsURI()
, ValidcodesservicePackage.eINSTANCE);
}
protected void loadValidCodesResponse(String response){
DocumentRoot docRoot=
(DocumentRoot) XMLTransformServiceFactory.INSTANCE.load(response);
validCodesServiceRoot = docRoot.getValidCodesService();
}
public ValidCodesServiceType getValidCodesServiceRoot() {
if(validCodesServiceRoot == null){
preLoadValidCodes();
}
return validCodesServiceRoot;
}
public void setValidCodesServiceRoot(
ValidCodesServiceType validCodesServicetRoot) {
this.validCodesServiceRoot = validCodesServicetRoot;
}
protected void preLoadValidCodes(){
String response = ValidCodesServiceProxy.invoke(
ValidCodesServiceProxy.ALL_REQUEST);
loadValidCodesResponse(response);
}
}
更新现有的根 bean 封装器
更新 brokerservice.root 包中现有的BrokerUpdateRoot.java Java 类 ,该包提供了相关的下载文件,或者更新带有以下附加物的文件:
下列方法通过使用框架 API 以将数据对象转变为 XML 字符串的方式向服务发送这些更新,从而更新 broker 信息。转变 API 的第 2 个参数确保所有的空属性将不属于序列化 XML 的一部分。如果这样的元素声明被接收端的 XML 处理器接收,那么用户就可以使用转变 API 的其他实现。
public void applyPolicyChanges(){
//unset all the features that are empty
String xmlData = XMLTransformServiceFactory.INSTANCE.convert((DataObject)brokerServiceRoot, true);
String response =
BrokerServiceProxy.invoke(xmlData,
BrokerServiceProxy.BROKERUPDATE_REQUEST);
loadBrokerDetailUpdateResponse(response);
}
使用装载 API 调用来装载从服务调用中返回的响应。创建 SDO 包时,所有不属于计划的元素将会通过装载调用记录下来。当该数据对象使用转变 API 被序列化到 XML 时, 这些元素就会被写回。
protected void loadBrokerDetailUpdateResponse(String response){
DocumentRoot docRoot=
(DocumentRoot) XMLTransformServiceFactory.INSTANCE.load(response);
BrokerServiceType brokerdetailUpdateRespRoot = docRoot.getBrokerService();
//set the error type
brokerServiceRoot.setError(brokerdetailUpdateRespRoot.getError());
}
该方法向客户端现有的策略清单中添加新的策略。ClientType 中的 createPolicy 方法创建新的 PolicyType 对象,并将其添加到现有 Policy 清单中。
public void addNewPolicy(ClientType clientType){
clientType.createPolicy();
}
该方法删除了客户端现有策略清单中选中的策略。
public void deleteSelectedPolicy(ClientType clientType){
for(int index=clientType.getPolicy().size()-1; index >= 0; --index){
PolicyType policyType = ((PolicyType)clientType.getPolicy().get(index));
if(policyType.getSelected()){
clientType.getPolicy().remove(policyType);
}
}
}
向页代码中添加命令方法
编辑 brokerupdate.jsp 的 Brokerupdate.java 页代码文件,并添加下列方法作为命令行为来使用。(这些方法中使用的控制数据访问器在下一步中定义。)
该操作调用了 BrokerUpdateRoot.class 上的 addNewPolicy 方法以向现有的策略清单中添加新的策略行。当前的 Client 行是使用 Client 数据表的 rowData 检索得到的。
public String doAddNewPolicyAction(){
this.getVarBrokerUpdateRootBean().addNewPolicy((ClientType)getTable1().getRowData());
//returning empty string re-displays the page with same data binding
return "";
}
该操作调用了BrokerUpdateRoot.class上的 deleteSelectedPolicy 方法来删除现有的策略清单上选中的策略。
public String doDeleteSelectedPolicyAction(){
this.getVarBrokerUpdateRootBean().deleteSelectedPolicy((ClientType)getTable1().getRowData());
return "";
}
该操作反映了带有任何数据改动的 Java bean,在此仅作演示之用。在实际的应用程序中,用户在这里可以进行一些数据处理,或者根本不需要这种方法。
public String doUpdatePolicyAction(){
return "";
}
该操作调用了 BrokerUpdateRoot.class 上的 applyPolicyChanges 方法以将更新后的数据发送给服务。varBrokerUpdateRootBean,会话的受 JSF 管理的会话范围 bean,它将从该会话中移出,以便该 bean 从下一个调用的新数据中重新写入。
public String doApplyPolicyChangesAction(){
this.getVarBrokerUpdateRootBean().applyPolicyChanges();
this.sessionScope.remove("varBrokerUpdateRootBean" ;
//a navigation rule is defined for this return
return "applyChanges";
}
附加到页数据的 Bean
在页数据中配置 varBrokerUpdateRootBean 使其成为受 JSF 管理的 bean,并设置范围为 session (图 11)。这将用户会话生命周期的 bean 实例。这样有关策略的创建、更新或者删除操作,将会继续保存在会话中,除非他们被应用到 Apply Changes 行为。
图 11. 配置页数据中的 Java Bean |
|