============================================================================
spring mvc参数复杂混合传递方式,混合返回方式:
在传递list的实体时如果还要传递其他单个属性这些单个属性要放在requestHeader中,
类似的图片流就放在requestbody中(一般httpclient工具方),后台拿也从requestbody中
@RequestHeader(value="fg") String fg 可以接受http请求的对应名称参数,也可接受直接方法调用的参数
@RequestMapping(value="/system/opmRole/Auths")
@ResponseBody
public JSONArray treeRead(@RequestHeader(value="fg") String fg,@RequestHeader(value="id",required=false) String id,@RequestHeader(value="leave") String leave,
@RequestHeader(value="roleId") String roleId,@RequestHeader(value="pId") String pId,@RequestHeader(value="groupId",required=false) String groupId1,
@RequestBody(required=false) List<OpmRolelimit> o){
JsonArray.addAll(treeRead(fg,id,leave,roleId,p.get("ID")+"",groupId,o));
return JsonArray;
}
function appendTable() {
var roleId=$("input[name='roleId']").val();
var leave=$("input[name='leave']").val();
var pId=$("input[name='pId']").val();
var id=$("input[id='idy']").val();
//alert($("input[id='idy']").val());
var dataParent = {
roleId: "1",
leave:"2",
pId:"3",
id:"5"
};
$.ajax({
type: "post",
url: "${pageContext.request.contextPath}/system/opmRole/Auths",
//data: dataParent,
// headers:"{\"id\": \"1\",\"leave\":\"2\",\"roleId\":\"3\",\"pId\":\"5\"}",
beforeSend: function(xhr){///参数方头部
xhr.setRequestHeader('id', id);//注意不同的浏览器这种传头部参数遇到空值会有问题,在后台加required=false
xhr.setRequestHeader('leave', leave);
xhr.setRequestHeader('roleId', roleId);
xhr.setRequestHeader('pId', pId);
xhr.setRequestHeader('fg', "1");
},
//dataType: 'json',
//contentType: "application/json",
success: function (data) {
if(data!=''&&data!=null){
var div1=$("#div1");
var table1=$("<table></table>");
var arr = eval(data);
for(j=0;j<arr.length;j++){
if(arr[j].leave=='1'){
var row =$("<tr></tr>");
var td =$("<td></td>");
td.append($(arr[j].str));
row.append(td);
table1.append(row);
}
var row2 ;
if(arr[j].leave=='2'){
row2 =$("<tr></tr>");
var td =$("<td></td>");
td.append(arr[j].str);
row2.append(td);
table1.append(row2);
}if(arr[j].leave=='3'){
var td =$("<td></td>");
td.append(arr[j].str);
table1.find("tr:last").append(td);
}
}
div1.html(table1);
}else{
alert("你输入的会员编号不存在!");
}
},
error:function(data){
alert("数据加载异常!");
}
});
}
ajax要么用responsebody(自动转化成json),要么用response.getWrite().write()(可以是string,也可以是html(页面局部整个html难拼接))
也可直接return “字符串”,或页面跳转
js中要能回调到需要写对接收格式
=====================================================================================================
response.getWrite().write() (字符)返回和return (页面跳转,字符)在一个方法中可以混用
@SuppressWarnings({ "rawtypes", "unchecked", "unused" })
@RequestMapping(value = "/chat/offer/record/{conobjKey}/{ownerKey}/{tradeCustomerKey}/{urlCurrentUserKey}", method = RequestMethod.GET)
public String TbConOrdPriceGetRecord(@RequestParam(value="cx", required=false) String cx,HttpSession session, HttpServletRequest request, HttpServletResponse response, @PathVariable String conobjKey,
@PathVariable String ownerKey, @PathVariable String tradeCustomerKey, @PathVariable String urlCurrentUserKey, Model model)
throws EsteelException, IOException {
if (conobjKey==null || ownerKey==null || tradeCustomerKey==null || urlCurrentUserKey==null || conobjKey.equals("") || ownerKey.equals("") || tradeCustomerKey.equals("") || urlCurrentUserKey.equals("")) {
writeToResponse(response, "invalid key");
return null;
} else {
/* 获取当前用户的key */
String currentuserKey = getCurrentUserKey(request, session);
if (!currentuserKey.equals(urlCurrentUserKey)) {
currentuserKey = urlCurrentUserKey;
}
if (!currentuserKey.equals(ownerKey) && !currentuserKey.equals(tradeCustomerKey)) {
/* 如果当前用户不是主人或者客户,不允许查看 */
writeToResponse(response, "access denied");
return null;
} else {
Map<String,Object> pn = new HashMap<String,Object>();
pn.put("objKey", conobjKey);
Map ren= tbConObjService.getConObjByKeynew(pn);
model.addAttribute("dataMap", ren);
/* if(ren.get("CUSTOMER_KEY").toString().equals(currentuserKey)){
}else{}*/
String MEASURE_MODE= (String) ren.get("MEASURE_MODE");
int wareKindKey= Integer.valueOf(ren.get("WAREKIND_KEY")+"");
String PRICE_MODEL= (String) ren.get("PRICE_MODEL");
String currency_type= (String) ren.get("CURRENCY_TYPE");
String type="";
Map ycLsPara = new HashMap<String,Object>();
ycLsPara.put("conobj_key", conobjKey);
List list = tbConObjService.getYCDHList(ycLsPara);
if (ren.get("BAIL_TYPE").equals("A")){
model.addAttribute("XUNPANTYPE", "No");
}else if ((ren.get("PACK_NAME") == null) || (!ren.get("PACK_NAME").equals("卷"))) {
model.addAttribute("XUNPANTYPE", "No");
}else {
Map ormx = new HashMap<String,Object>();
ormx.put("CONOBJ_KEY", conobjKey);
ormx.put("LIST_STATUS", "A");
List<Map> conObjHuoWuListMap = tbConObjService.getJZMX1(ormx);
model.addAttribute("conObjHuoWuListMap", conObjHuoWuListMap);
model.addAttribute("XUNPANTYPE", "HuoWu");
}
Map paramPz = new HashMap<String,Object>();
paramPz.put("CONOBJ_KEY", conobjKey);
paramPz.put("CUSTOMER_KEY", currentuserKey);
paramPz.put("ORDER_STATUS", "A");
paramPz.put("ORD_KEY", null);
List<Map> conOrdMap= tbConObjService.getConOrdByCustomerKey(paramPz);
if (conOrdMap != null && conOrdMap.size()>0) {
model.addAttribute("conOrdMap", conOrdMap.get(0));
}else{
model.addAttribute("conOrdMap", null);
}
if (conOrdMap != null && conOrdMap.size()>0) {
Map ormx = new HashMap<String,Object>();
ormx.put("ORD_KEY", Integer.valueOf(conOrdMap.get(0).get("ORD_KEY")+""));
ormx.put("ORDPRICE_NO", null);
ormx.put("CUSTOMER_KEY", null);
ormx.put("ORDPRICE_MAN", "A");
tbConObjService.updateConOrdPriceIS_LOOK(ormx);
}
Map corprspara = new HashMap<String,Object>();
corprspara.put("CONOBJ_KEY", conobjKey);
corprspara.put("CUSTOMER_KEY", tradeCustomerKey);//询盘
corprspara.put("ORDPRICE_MAN", null);
List<Map> yjList= tbConObjService.getConOrdPriceList(corprspara);
model.addAttribute("yjList", yjList);
if("Y".equals(ren.get("IS_MULTIWARE"))){
Map paramPzOrdKey = new HashMap<String,Object>();
paramPzOrdKey.put("CONOBJ_KEY", conobjKey);
paramPzOrdKey.put("CUSTOMER_KEY", tradeCustomerKey);
paramPzOrdKey.put("ORDER_STATUS", "D");
paramPzOrdKey.put("ORD_KEY", cx);
List<Map> conOrdMapOrdKey=null;
if(cx==null||"".equals(cx)){
conOrdMapOrdKey=null;
}else{
conOrdMapOrdKey= tbConObjService.getConOrdByCustomerKey(paramPzOrdKey);
}
model.addAttribute("conOrdMapOrdKey", conOrdMapOrdKey);
if ((yjList != null) && (yjList.size() > 0)){
boolean first = true;
for (int i = 0; i < yjList.size(); i++){
Map map = (Map)yjList.get(i);
if ("Y".equals(map.get("IS_MULTIWARE"))){
Map prsMX = new HashMap<String,Object>();
prsMX.put("ord_key", map.get("ORD_KEY"));
prsMX.put("ordprice_no", map.get("ORDPRICE_NO"));
map.put("MX", tbConObjService.getConOrdPriceMX(prsMX));
if (("B".equals(map.get("ORDPRICE_MAN"))) && (first)) {
first = false;
model.addAttribute("conOrdPriceLastObjectMap", tbConObjService.getConOrdPriceMX(prsMX));
}
}
}
}
TbConOrd tbConOrdNew = new TbConOrd();
tbConOrdNew.setOrdKey(cx);
TbConOrd tbConOrdNew2 = null;
if(cx!=null&&!"".equals(cx)){
tbConOrdNew2 = tbConOrdService.getTbConOrdByObj(tbConOrdNew);
}
if(tbConOrdNew2!=null){
model.addAttribute("ordSta", tbConOrdNew2.getOrderStatus());
}else{
model.addAttribute("ordSta", "");
}
if(ren.get("CUSTOMER_KEY").toString().equals(currentuserKey)){
return "/chat/offer/ySaleCDHDickerList";
}else{
return "/chat/offer/yCDHDickerList";
}
}else{
TbConObj tbConObj = tbConObjService.getTbConObjById(conobjKey);
List<TbConOrdVo> tbConOrdVoList = tbConOrdService.getTbConOrdVoList(conobjKey, tradeCustomerKey);
String strJson = "({";
strJson += "\"chatRecord\":[";
int k = 0;
String highPrice = "1999999999";
String lowPrice = "0";
for (TbConOrdVo tbConOrdVo1 : tbConOrdVoList) {
/* 循环得到最高价和最低价 */
if (tbConOrdVo1.getOrdpriceMan() != null) {
if (tbConOrdVo1.getOrdpriceMan().equals("B")) {
/* 不是是发起方 */
if (tbConOrdVo1.getContradeType().equals("A")) {
/* 是卖单 */
if (Double.parseDouble(lowPrice) < Double.parseDouble(tbConOrdVo1.getOrderPrice())) {
lowPrice = tbConOrdVo1.getOrderPrice();
}
} else {
/* 是买单 */
if (Double.parseDouble(highPrice) > Double.parseDouble(tbConOrdVo1.getOrderPrice())) {
highPrice = tbConOrdVo1.getOrderPrice();
}
}
} else {
/* 是发起方 */
if (tbConOrdVo1.getContradeType().equals("A")) {
/* 是卖单 */
if (Double.parseDouble(highPrice) > Double.parseDouble(tbConOrdVo1.getOrderPrice())) {
highPrice = tbConOrdVo1.getOrderPrice();
}
} else {
/* 是买单 */
if (Double.parseDouble(lowPrice) < Double.parseDouble(tbConOrdVo1.getOrderPrice())) {
lowPrice = tbConOrdVo1.getOrderPrice();
}
}
}
} else {
/* 不是是发起方 */
if (tbConOrdVo1.getContradeType().equals("A")) {
/* 是卖单 */
if (Double.parseDouble(lowPrice) < Double.parseDouble(tbConOrdVo1.getOrderPrice())) {
lowPrice = tbConOrdVo1.getOrderPrice();
}
} else {
/* 是买单 */
if (Double.parseDouble(highPrice) > Double.parseDouble(tbConOrdVo1.getOrderPrice())) {
highPrice = tbConOrdVo1.getOrderPrice();
}
}
}
k = k + 1;
strJson += "{";
String msgText = tbConOrdVo1.getMsgText();
if (null == msgText || msgText.contains("请录入您的议价留言,最大为300个字符!按Ctrl+Enter提交!")) {
msgText = "";
}
/* 替换掉换行符,否则会报错 */
msgText = msgText.replaceAll("\n", "");
int chatChoice = 0;
int isdlfs=0;
if(tbConObj.getCustomerKey().equals(currentuserKey)){
isdlfs=1;
}
if (tbConOrdVo1.getOrdpriceMan() != null) {
if (tbConOrdVo1.getOrdpriceMan().equals("B")) {
chatChoice = 2;
int flag =0;
if(tbConObj.getCustomerKey().equals(currentuserKey)){
flag=1;
}
/* 不是是发起方 */
strJson += "\"chatChoice\":\"2\","+"\"isDlFQ\":\""+flag+"\","+"\"isdlfs\":\""+isdlfs+"\",";
} else {
/* 是发起方 */
chatChoice = 1;
int flag =0;
if(tbConObj.getCustomerKey().equals(currentuserKey)){
flag=1;
}
strJson += "\"chatChoice\":\"1\","+"\"isDlFQ\":\""+flag+"\","+"\"isdlfs\":\""+isdlfs+"\",";
}
} else {
chatChoice = 1;
int flag =0;
if(tbConObj.getCustomerKey().equals(currentuserKey)){
flag=1;
}
strJson += "\"chatChoice\":\"1\","+"\"isDlFQ\":\""+flag+"\","+"\"isdlfs\":\""+isdlfs+"\",";
}
if (tbConObj.getAnonymMark().equals("B")) {
strJson += "\"chatName\":\"***\",";
} else {
/*
* 当currentuserKey eq
* tbConObj.getCustomerKey(),说明当前是主人在浏览
*/
/*
* 当currentuserKey eq
* tbConOrdVo1.getCustomerKey(),说明是客人在浏览
*/
if (chatChoice == 1 && currentuserKey.equals(tbConObj.getCustomerKey())) {
strJson += "\"chatName\":\"我\",";
} else if (chatChoice == 2 && currentuserKey.equals(tbConOrdVo1.getCustomerKey())) {
strJson += "\"chatName\":\"我\",";
} else {
if(chatChoice == 1){
strJson += "\"chatName\":\"" + ren.get("CUSTOMER_NAME") + "\",";//tbConOrdVo1.getCustomerName()
}else{
strJson += "\"chatName\":\"" + tbConOrdVo1.getCustomerName() + "\",";//tbConOrdVo1.getCustomerName()
}
}
}
strJson += "\"chatPrice\":\"" + tbConOrdVo1.getNewPrice() + "\",";
if (tbConObj.getCurrencyType().equals("A")) {
strJson += "\"chatCurrency\":\"元\",";
} else if (tbConObj.getCurrencyType().equals("B")) {
strJson += "\"chatCurrency\":\"美元\",";
}
strJson += "\"chatNumUnit\":\"" + tbConObj.getNumUnit() + "\",";
strJson += "\"chatNum\":\"" + tbConOrdVo1.getNewNum() + "\",";//tbConOrdVo1.getOrderNum()
strJson += "\"objKey\":\"" + tbConOrdVo1.getConobjKey()+ "\",";
strJson += "\"ordKey\":\"" + tbConOrdVo1.getOrdKey() + "\",";
strJson += "\"ordPriceNo\":\"" + tbConOrdVo1.getOrdpriceNo() + "\",";
strJson += "\"contradeKind\":\"" + tbConObj.getContradeKind() + "\",";
strJson += "\"ordKey\":\"" + tbConOrdVo1.getOrdKey() + "\",";
strJson += "\"chatMsgText\":\"" + msgText + "\"}";
if (k < tbConOrdVoList.size()) {
strJson += ",";
}
}
TbConOrd tbConOrdNew = new TbConOrd();
tbConOrdNew.setOrdKey(cx);
TbConOrd tbConOrdNew2 = null;
if(cx!=null&&!"".equals(cx)){
tbConOrdNew2 = tbConOrdService.getTbConOrdByObj(tbConOrdNew);
}
strJson += "],";
strJson += "\"highPrice\":\"" + highPrice + "\",";
if(tbConOrdNew2!=null){
strJson += "\"ordSta\":\"" + tbConOrdNew2.getOrderStatus() + "\",";
}else{
strJson += "\"ordSta\":\"\",";
}
strJson += "\"lowPrice\":\"" + lowPrice + "\"";
strJson += "})";
writeToResponse(response, strJson);
return null;
}
}
}
}
相关推荐
此外,Spring MVC还提供了ModelAndView对象来传递模型数据到视图,以及视图解析器来确定最终的视图。 在这个名为“budi-kurniawan-servlet-jsp-springmvc-examples-4754f4ab5d5c”的压缩包中,可能包含了各种示例...
Servlet+JSP与Spring+MVC是两种在Java...Servlet+JSP更适合小型项目,而Spring+MVC在大型复杂项目中表现出色。结合配套源码学习,能帮助初学者快速掌握这两者的核心概念和实践技巧,为日后的Java Web开发打下坚实基础。
在配置方面,Spring MVC 4.0.5支持Java配置和XML配置的混合使用,让开发者可以根据项目需求灵活选择配置方式。此外,Spring Boot的兴起使得Spring MVC的配置进一步简化,通过自动配置特性,开发者可以快速启动和运行...
- 数据绑定:Spring MVC 自动将请求参数绑定到 Controller 方法的参数。 - 验证:使用 `@Valid` 进行数据验证,结合 Hibernate Validator 或 JSR-303/JSR-349 规范实现。 6. **异常处理** - 全局异常处理器:...
2. **Spring MVC**:在Java世界中,Spring MVC是广泛应用的MVC框架,它简化了Web应用的开发,提供了优雅的解耦方式。 3. **分页实现**:在Spring MVC中,分页通常借助于Spring Data JPA或MyBatis等持久层框架实现。...
通过结合JSP的视图呈现、Spring的控制层管理和Hibernate的数据持久化,开发者能够快速、高效地开发出具有复杂业务逻辑的博客平台。如果你希望深入了解这个系统的实现细节,需要深入研究源代码和配置文件,理解它们...
Spring MVC通过DispatcherServlet作为入口点,将请求分发到对应的控制器,然后由控制器调用服务层处理业务逻辑,最后将结果传递给视图层进行展示。 **Hibernate** Hibernate是一个强大的对象关系映射(ORM)框架,...
- **Spring MVC**:Spring MVC是Spring框架的一个模块,用于构建Web应用程序。 - **WebSocket支持**:Spring还支持WebSocket,可用于实现实时通信功能。 #### 17. WebSocket - **WebSocket基础**:介绍了WebSocket...
Spring MVC是Spring框架的一部分,提供了另一种实现MVC设计模式的方式,相比Struts,Spring MVC提供了更现代、更灵活的Web应用开发体验。 结合这三个框架,开发者可以构建出强大的Web应用,其中Struts处理HTTP请求...
- Spring MVC是一个流行的Java框架,它简化了在JSP中实现MVC模式的过程,提供了强大的依赖注入和AOP(面向切面编程)支持。 6. **应用场景**:MVC模式广泛应用于大型Web项目,如电商平台、社交网络等,它能帮助...
Spring还包含了事务管理、数据访问集成、邮件服务、任务调度等众多模块,使得开发者能构建复杂的企业级应用。 学习Struts+Hibernate+Spring架构,你需要理解以下几个关键点: 1. **MVC模式**:理解模型、视图和...
通过这些机制,Spring允许开发者以声明的方式管理对象间的依赖关系,从而使得代码更加灵活和可维护。 **2.2 模块划分** - **核心容器(Core Container)**:包含Spring框架的基本组成部分,如BeanFactory,它是工厂...
5. **使用MVC框架**:如Struts或Spring MVC,它们提供了更完善的MVC支持,简化开发流程,增强系统的稳定性和可维护性。 通过以上设计和实现,我们可以构建出一个功能完善、易于维护的图书馆管理系统,同时深入理解...
它允许将HTML、CSS和Java代码混合编写,提供了一种便捷的方式来处理服务器端逻辑。JSP页面由Web容器(如Tomcat)处理,转换为Servlet并在客户端展示。 3. Spring Boot与JSP的集成: Spring Boot默认使用Thymeleaf、...
随着技术的发展,各种Web应用程序框架应运而生,如Struts、Spring MVC等。这些框架提供了更高级别的抽象和支持,简化了MVC模式的应用。 - **Struts**:基于Servlet的Java Web框架,提供了一套完整的解决方案来构建...
Spring Boot基于“约定优于配置”的原则,提供了一种快速启动和运行Spring应用的方式。通过内置的Tomcat服务器和自动配置特性,开发者可以迅速构建一个独立的、生产级别的应用。 **MyBatis** MyBatis是一个优秀的...
传统的Web开发,如使用JSP混合Java代码的方式,虽然简单直接,但存在可读性差、难以维护等问题。SSH框架的引入,将这些职责进行了明确划分,提高了代码的可读性和可维护性,使得团队协作更为高效。 以登录为例,...
Spring的AOP模块提供了一种在程序执行过程中插入关注点(如日志、事务管理)的方式。Spring 3.1.0增强了对AOP代理的控制,支持了CGLIB和JDK动态代理的混合使用,同时改进了切面的定义和处理。 3. **数据访问/集成*...
6. Struts 2或Spring MVC的Action类调用Service层方法,处理请求并返回结果。 7. 使用JSP创建视图,通过OGNL或EL表达式显示数据。 通过这个基础框架,开发者可以快速搭建一个具备基本功能的Java Web应用,并在此...