package org.ofbiz.hello3;
import java.util.HashMap;
import java.util.Map;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilMisc;
import org.ofbiz.entity.GenericDelegator;
import org.ofbiz.entity.GenericEntityException;
import org.ofbiz.entity.GenericValue;
import org.ofbiz.service.DispatchContext;
import org.ofbiz.service.ServiceUtil;
public class Hello3Services {
public static final String module = Hello3Services.class.getName();
//用于测试。
public static Map createHelloPerson(DispatchContext dctx, Map context) {
//JAVA服务写成一种标准的格式:一个公共类里有一个公共静态方法,该方法有两个参数,
//一个DispatchContext用于取得对象(delegators, dispatchers, locale, and //security),
//一个名叫context的影射Map包含了你的输入参数并返回一个结果影射
GenericDelegator delegator = dctx.getDelegator();
//步骤一、获取delegator(一个集成大部分地数据操作方法的牛B对象)
//用DispatchContext类的getDelegator()方法取得和该dispatch/context相关联的GenericDelegator对象,即delegator. GenericDelegator是用于访问数据库的类
//要操作数据库必须先取得该对象。
try {
String helloPersonId = delegator.getNextSeqId("HelloPerson");
//步骤二、用delegator调用方法取得序列号
// GenericDelegator 类的getNextSeqId 方法用于从给定的序列中取得下一个有保证的//唯一的序列号;如果该序列不存在,该方法将创建它。方法原型为:
//String getNextSeqId(java.lang.String seqName)
Debug.logInfo("helloPersonId = " + helloPersonId, module);
// 输出到控制台或日志,仅仅是输出而已,可以帮助调试。
GenericValue helloPerson = delegator.makeValue("HelloPerson",
UtilMisc.toMap("helloPersonId", helloPersonId));
//步骤三、调用delegator的makeValue方法创建GenericValue对象
//GenericDelegator 类的makeValue方法用于创建GenericValue对象,该对象对应数据//库中一个具体实体,该方法的第一个参数是String型的实体名,第二个参数是一个映射。//方法原型为:
//GenericValue makeValue (java.lang.String entityName, java.util.Map fields)
helloPerson.setNonPKFields(context);
//步骤四、将输入参数中的非主码参数向GenericValue对象赋值(service.xml里传过来的参数,并且非主键参数)
//GenericValue对象helloPerson调用GenericValue类的setNonPKFields方法将输入的//非主码域值传递给自己。该方法的原型为:
//void setNonPKFields(java.util.Map fields)
//其实该方法是GenericValue类继承GenericEntity类的方法得来的。
delegator.create(helloPerson);
//步骤五、调用delegator的create方法将GenericValue对象写入数据库
//调用GenericDelegator类的create()方法根据GenericValue 的格式创建实体,并将
//实体写入数据源。该方法的原型是:GenericValue create(GenericValue value)
Map result = ServiceUtil.returnSuccess();
// 由ServiceUtil类的returnSuccess()方法返回一个Map对象
//方法原型是:static java.util.Map returnSuccess(java.lang.String successMessage)
result.put("helloPersonId", helloPersonId);
// 在映射中关联指定对象的值到指定对象的码,即将输出参数放到映射中返回用户
//方法原型为:Object put(Object key, Object value)
return result;
// return Map
} catch (GenericEntityException ex) { // required if you use delegator in Java
return ServiceUtil.returnError(ex.getMessage());
}
}
}
小结:
步骤一、获取delegator
步骤二、用delegator调用方法取得序列号
步骤三、调用delegator的makeValue方法创建GenericValue对象
步骤四、将输入参数中的非主码参数向GenericValue对象赋值
步骤五、调用delegator的create方法将GenericValue对象写入数据库
最后,通过MAP返回。
有公司这样用
public class Hello3Services {
public static final String module = Hello3Services.class.getName();
//用于测试。
public static Map createHelloPerson(HttpServletRequest request, HttpServletResponse response) {
GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
String hname = request.getParameter("XXXX");
String hxml = request.getParameter("XXOO");
try {
Map map = new HashMap();
String helloPersonId = delegator.getNextSeqId("HelloPerson");
map.put("helloPersonId", helloPersonId);
map.put("helloname", hname);
map.put("helloxml", hxml);
// Debug.logInfo("helloPersonId = " + helloPersonId, module);
GenericValue helloPerson = delegator.makeValue("HelloPerson",map);
delegator.create(helloPerson);
return "SUCCESS";
// return Map
} catch (GenericEntityException ex) { // required if you use delegator in Java
return ServiceUtil.returnError(ex.getMessage());
}
}
}
由于这两种方式是两个不同的EVENT,controller控制器(实际就是个servlet的映射)
先来看看两种情况的controller
<request-map uri="createHello">
<security https="true" auth="true" />
<event type="service" invoke="serviceName"/>
<response name="success" type="view" value="updateButtonView" />
<response name="error" type="view" value="updateButtonView" />
</request-map>
<!--这是第一种,对应的controller处理type="service"-->
<request-map uri="createHello">
<security https="true" auth="true" />
<event type="java" invoke="createHello" path="com.sp.work.HelloManage" />
<response name="success" type="view" value="updateButtonView" />
<response name="error" type="view" value="updateButtonView" />
</request-map>
<!--这是第二种,对应的controller处理type="java"-->
比较:
入参通过request对象获取
controller控制器需要返回的这个字符串决定转向,返回Map的话,不能正确转向。
所以在java方法里面我们需要返回一个String的字符串来决定转向。
入参通过service服务配置入参(IN)来传递给调用的java方法
[……局部代码……]
<attribute name="tabletype" type="String" mode="IN"optional="true" />
java返回参数放在map里面。service配置里面可以配置返回Map里面的所有元素
[……局部代码……]
<attribute name="entityId" type="String" mode="OUT"optional="true" />
返回并转向,可以调用ofbiz一个特殊的东西Modelservice
java代码应该这么写
map.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_SUCCESS);
---------------------------------------------------------------------
map = ServiceUtil.returnSuccess();
map.put("","");//ServiceUtil类大家可以看看,定义了许多这样方法,可以提高效率
---------------------------------------------------------------------
map.put(ModelService.RESPONSE_MESSAGE,"success");success对应controller里面的转向名
---------------------------------------------------------------------
称
map里面有多少元素,你需要哪些元素,你都可以这样去配置。但是你的name要与map中元素的键想对应.
如果想在页面上面获取这些值,我们可以通过在screen组件配置actions标签,然后set标签这样${parameters.XXXX}将Map里OUT过来的值set进来。
<set field="entityId" value=${parameters.entityId}/><!--请求中所代参数直接可以在这里set进来-->
我们页面就可以${entityId}
继续补充,有其他见解的朋友,希望可以留下联系方式,一同讨论
import java.util.HashMap;
import java.util.Map;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilMisc;
import org.ofbiz.entity.GenericDelegator;
import org.ofbiz.entity.GenericEntityException;
import org.ofbiz.entity.GenericValue;
import org.ofbiz.service.DispatchContext;
import org.ofbiz.service.ServiceUtil;
public class Hello3Services {
public static final String module = Hello3Services.class.getName();
//用于测试。
public static Map createHelloPerson(DispatchContext dctx, Map context) {
//JAVA服务写成一种标准的格式:一个公共类里有一个公共静态方法,该方法有两个参数,
//一个DispatchContext用于取得对象(delegators, dispatchers, locale, and //security),
//一个名叫context的影射Map包含了你的输入参数并返回一个结果影射
GenericDelegator delegator = dctx.getDelegator();
//步骤一、获取delegator(一个集成大部分地数据操作方法的牛B对象)
//用DispatchContext类的getDelegator()方法取得和该dispatch/context相关联的GenericDelegator对象,即delegator. GenericDelegator是用于访问数据库的类
//要操作数据库必须先取得该对象。
try {
String helloPersonId = delegator.getNextSeqId("HelloPerson");
//步骤二、用delegator调用方法取得序列号
// GenericDelegator 类的getNextSeqId 方法用于从给定的序列中取得下一个有保证的//唯一的序列号;如果该序列不存在,该方法将创建它。方法原型为:
//String getNextSeqId(java.lang.String seqName)
Debug.logInfo("helloPersonId = " + helloPersonId, module);
// 输出到控制台或日志,仅仅是输出而已,可以帮助调试。
GenericValue helloPerson = delegator.makeValue("HelloPerson",
UtilMisc.toMap("helloPersonId", helloPersonId));
//步骤三、调用delegator的makeValue方法创建GenericValue对象
//GenericDelegator 类的makeValue方法用于创建GenericValue对象,该对象对应数据//库中一个具体实体,该方法的第一个参数是String型的实体名,第二个参数是一个映射。//方法原型为:
//GenericValue makeValue (java.lang.String entityName, java.util.Map fields)
helloPerson.setNonPKFields(context);
//步骤四、将输入参数中的非主码参数向GenericValue对象赋值(service.xml里传过来的参数,并且非主键参数)
//GenericValue对象helloPerson调用GenericValue类的setNonPKFields方法将输入的//非主码域值传递给自己。该方法的原型为:
//void setNonPKFields(java.util.Map fields)
//其实该方法是GenericValue类继承GenericEntity类的方法得来的。
delegator.create(helloPerson);
//步骤五、调用delegator的create方法将GenericValue对象写入数据库
//调用GenericDelegator类的create()方法根据GenericValue 的格式创建实体,并将
//实体写入数据源。该方法的原型是:GenericValue create(GenericValue value)
Map result = ServiceUtil.returnSuccess();
// 由ServiceUtil类的returnSuccess()方法返回一个Map对象
//方法原型是:static java.util.Map returnSuccess(java.lang.String successMessage)
result.put("helloPersonId", helloPersonId);
// 在映射中关联指定对象的值到指定对象的码,即将输出参数放到映射中返回用户
//方法原型为:Object put(Object key, Object value)
return result;
// return Map
} catch (GenericEntityException ex) { // required if you use delegator in Java
return ServiceUtil.returnError(ex.getMessage());
}
}
}
小结:
步骤一、获取delegator
步骤二、用delegator调用方法取得序列号
步骤三、调用delegator的makeValue方法创建GenericValue对象
步骤四、将输入参数中的非主码参数向GenericValue对象赋值
步骤五、调用delegator的create方法将GenericValue对象写入数据库
最后,通过MAP返回。
有公司这样用
public class Hello3Services {
public static final String module = Hello3Services.class.getName();
//用于测试。
public static Map createHelloPerson(HttpServletRequest request, HttpServletResponse response) {
GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
String hname = request.getParameter("XXXX");
String hxml = request.getParameter("XXOO");
try {
Map map = new HashMap();
String helloPersonId = delegator.getNextSeqId("HelloPerson");
map.put("helloPersonId", helloPersonId);
map.put("helloname", hname);
map.put("helloxml", hxml);
// Debug.logInfo("helloPersonId = " + helloPersonId, module);
GenericValue helloPerson = delegator.makeValue("HelloPerson",map);
delegator.create(helloPerson);
return "SUCCESS";
// return Map
} catch (GenericEntityException ex) { // required if you use delegator in Java
return ServiceUtil.returnError(ex.getMessage());
}
}
}
由于这两种方式是两个不同的EVENT,controller控制器(实际就是个servlet的映射)
先来看看两种情况的controller
<request-map uri="createHello">
<security https="true" auth="true" />
<event type="service" invoke="serviceName"/>
<response name="success" type="view" value="updateButtonView" />
<response name="error" type="view" value="updateButtonView" />
</request-map>
<!--这是第一种,对应的controller处理type="service"-->
<request-map uri="createHello">
<security https="true" auth="true" />
<event type="java" invoke="createHello" path="com.sp.work.HelloManage" />
<response name="success" type="view" value="updateButtonView" />
<response name="error" type="view" value="updateButtonView" />
</request-map>
<!--这是第二种,对应的controller处理type="java"-->
比较:
入参通过request对象获取
controller控制器需要返回的这个字符串决定转向,返回Map的话,不能正确转向。
所以在java方法里面我们需要返回一个String的字符串来决定转向。
入参通过service服务配置入参(IN)来传递给调用的java方法
[……局部代码……]
<attribute name="tabletype" type="String" mode="IN"optional="true" />
java返回参数放在map里面。service配置里面可以配置返回Map里面的所有元素
[……局部代码……]
<attribute name="entityId" type="String" mode="OUT"optional="true" />
返回并转向,可以调用ofbiz一个特殊的东西Modelservice
java代码应该这么写
map.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_SUCCESS);
---------------------------------------------------------------------
map = ServiceUtil.returnSuccess();
map.put("","");//ServiceUtil类大家可以看看,定义了许多这样方法,可以提高效率
---------------------------------------------------------------------
map.put(ModelService.RESPONSE_MESSAGE,"success");success对应controller里面的转向名
---------------------------------------------------------------------
称
map里面有多少元素,你需要哪些元素,你都可以这样去配置。但是你的name要与map中元素的键想对应.
如果想在页面上面获取这些值,我们可以通过在screen组件配置actions标签,然后set标签这样${parameters.XXXX}将Map里OUT过来的值set进来。
<set field="entityId" value=${parameters.entityId}/><!--请求中所代参数直接可以在这里set进来-->
我们页面就可以${entityId}
继续补充,有其他见解的朋友,希望可以留下联系方式,一同讨论