a标签提交表单
<ul class="clearfix"> <li> <form th:action="@{/pay}" id="price" method="post"> <input type="hidden" name="payMoney" value="10.00"> <a href="#" onclick="document.getElementById('price').submit();return false;"> <figure><img src="/img/kaorou1.png"/></figure> <p>经典烤肉10.00元</p> </a> </form> </li> <li> <form th:action="@{/pay}" id="price2" method="post"> <input type="hidden" name="payMoney" value="19.00"> <a href="#" onclick="document.getElementById('price2').submit();return false;"> <figure><img src="/img/kaorou2.png"/></figure> <p>烈火烤肉19.00元</p> </a> </form> </li> <li> <form th:action="@{/pay}" id="price3" method="post"> <input type="hidden" name="payMoney" value="29.99"> <a href="#" onclick="document.getElementById('price3').submit();return false;"> <figure><img src="/img/kaorou3.png"/></figure> <p>五香烤肉29.99元</p> </a> </form> </li> <li> <form th:action="@{/pay}" id="price4" method="post"> <input type="hidden" name="payMoney" value="46.10"> <a href="#" onclick="document.getElementById('price4').submit();return false;"> <figure><img src="/img/kaorou4.png"/></figure> <p>青醋烤肉46.10元</p> </a> </form> </li> <li> <form th:action="@{/pay}" id="price5" method="post"> <input type="hidden" name="payMoney" value="100.20"> <a href="#" onclick="document.getElementById('price5').submit();return false;"> <figure><img src="/img/kaorou5.png"/></figure> <p>嘻嘻烤肉100.20元</p> </a> </form> </li> <li> <form th:action="@{/pay}" id="price6" method="post"> <input type="hidden" name="payMoney" value="10"> <a href="#" onclick="document.getElementById('price6').submit();return false;"> <figure><img src="/img/kaorou6.png"/></figure> <p>暮春烤肉99.99元</p> </a> </form> </li> </ul>
@RequestMapping("/pay") public void payController(HttpServletRequest request, HttpServletResponse response, String payMoney) throws IOException { //获得初始化的AlipayClient AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.APP_ID, AlipayConfig.APP_PRIVATE_KEY, "json", AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.sign_type); //设置请求参数 AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); alipayRequest.setReturnUrl(AlipayConfig.return_url); alipayRequest.setNotifyUrl(AlipayConfig.notify_url); //商户订单号,商户网站订单系统中唯一订单号,必填 // 订单号 order String order = UUID.randomUUID().toString().replaceAll("-", ""); // 付款金额 money //订单名称 String orderName="JSXS-JDYHGD"; String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").format(new Date()); //商品描述 String orderDescription=format+""; // String out_trade_no = new String(order.getBytes("ISO-8859-1"), "UTF-8"); //付款金额,必填 String total_amount = new String(payMoney.getBytes("ISO-8859-1"), "UTF-8"); //订单名称,必填 String subject = new String(orderName.getBytes("ISO-8859-1"), "gbk"); //商品描述,可空 String body = new String(orderDescription.getBytes("ISO-8859-1"), "gbk"); alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\"," + "\"total_amount\":\"" + total_amount + "\"," + "\"subject\":\"" + subject + "\"," + "\"body\":\"" + body + "\"," + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); //若想给BizContent增加其他可选请求参数,以增加自定义超时时间参数timeout_express来举例说明 //alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"," // + "\"total_amount\":\""+ total_amount +"\"," // + "\"subject\":\""+ subject +"\"," // + "\"body\":\""+ body +"\"," // + "\"timeout_express\":\"10m\"," // + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); //请求参数可查阅【电脑网站支付的API文档-alipay.trade.page.pay-请求参数】章节 //请求 String form = ""; try { form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单 } catch (AlipayApiException e) { e.printStackTrace(); } response.setContentType("text/html;charset=" + AlipayConfig.CHARSET); response.getWriter().write(form);//直接将完整的表单html输出到页面 response.getWriter().flush(); response.getWriter().close(); } @RequestMapping("/preverpay") public String toTest(){ return "aliyunpay"; } }
3.经验总结
- 切记第一件事情请勿把配置文件的文件名写错。
- springBoot的静态资源 不用指明路径。
- 在a标签中利用Resultful风格对数据
- 使用表的时候,表名一定要飘号
4.全部记录数据
- 切记第一件事情请勿把配置文件的文件名写错。
- springBoot的静态资源 不用指明路径。
(就是在static的css js img可以直接被templates访问)
<link rel=stylesheet type="text/css" href="/css/1024_768.css"> <link type="text/css" href="/css/nav.css" rel="stylesheet"/> <script language="javascript" src="/js/jquery-1.7.2.min.js"></script> <script language="javascript" src="/js/nav.js"></script> <script language="javascript" src="/js/jquery.pack.js"></script> <script language="javascript" src="/js/slide.js"></script> <script language="javascript" src="/js/png.js"></script> <script type="text/javascript" src="/jwplayer.js"></script>
- 在a标签中利用Resultful风格实现对页面的跳转
<a th:href="@{/news.html}" class="news">新闻中心</a>
- 只有thymeleaf才能去访问templates
- 如果没有在配置文件中配置数据库的信息,那就不要导入相关依赖。否则会报错
- document实现对页面的跳转 :
<li class="roll_pic r_01" onclick="document.location.href='/cun/Pay'">
- 利用ResultFul风格试图降低Controller层的冗余性
@RequestMapping("/cun/{tail}") public String cunPay(Model model,@PathVariable("tail") String tail){ // 村委会账单公告 double sum=0; List<payMoney> payMonies = liloucuncunweihuiServer.allPay(); for (payMoney payMony : payMonies) { sum+=payMony.getMoney(); } model.addAttribute("cunPay",payMonies); model.addAttribute("sumMomey","总支出: "+sum+"元"); // 村委选举 List<cunXuan> cunXuans = liloucuncunweihuiServer.allXuan(); model.addAttribute("cunCount","村选人数: "+cunXuans.size()); model.addAttribute("cunXuans",cunXuans); return "cunPublic/cun"+tail; }
- 表名可以驼峰,字段名要和实体类一致,在xml语法中表名和字段名也要和数据库的一致
- @{}标签与${}标签共用:
<a th:href="@{/cunAdd/{id}(id=${cunxuan.id})}">投票</a>
- 如果我们在用controller重定向某一个路由的时候,第一个"/"一定要加上
@RequestMapping("/cunAdd/{id}") public String addTickets(@PathVariable("id") int id){ List<cunXuan> cunXuans = liloucuncunweihuiServer.allXuan(); cunXuan cunXuan = cunXuans.get(id-1); int count = cunXuan.getSum_ticket(); count+=1; int i = liloucuncunweihuiServer.addTicket(id, count); return "redirect:/cun/Xuan"; }
- img实现对表单的提交
<form th:action="@{/pay}" id="price5" method="post"> <input type="hidden" name="payMoney" value="100.20"> <a href="#" onclick="document.getElementById('price5').submit();return false;"> <figure><img src="/img/kaorou5.png"/></figure> <p>嘻嘻烤肉100.20元</p> </a>
- 如果使用了ResultFul风格的话,普通的路径就不能用了。
- 假如说在templates包中创建另一个news包,那么静态资源前面需要加上 “/“templates下的html页面也需要添加”/”
<link rel=stylesheet type="text/css" href="/css/1024_768.css"> <link type="text/css" href="/css/nav.css" rel="stylesheet"/> <link type="text/css" href="/css/about.css" rel="stylesheet"/> <script language="javascript" src="/js/jquery-1.7.2.min.js"></script> <script language="javascript" src="/js/nav.js"></script> <script language="javascript" src="/js/png.js"></script> <script language="javascript" src="/js/jquery.pack.js"></script> <script language="javascript" src="/js/slide.js"></script>
- 利用RestFul风格实现换内容不换页面的操作.
@RequestMapping("/article/{id}") public String article(Model model,@PathVariable("id") int id){ model.addAttribute("title1","关于卫生问题的公告!!"); model.addAttribute("title2","关于卫生问题的公告!!2"); article article = liloucuncunweihuiServer.articleById(id); model.addAttribute("article",article.getText()); return "article/article1"; }
- 日期格式化
String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").format(new Date());
- 新闻日期更新排序,(最新更新的文章放到最前面)
@RequestMapping("/article/{id}") public String article(Model model, @PathVariable("id") int id) { // 这里是正文中的标题 model.addAttribute("title1", "关于卫生问题的公告!!"); model.addAttribute("title2", "关于卫生问题的公告!!2"); model.addAttribute("title3", "关于卫生问题的公告!!3"); model.addAttribute("title4", "关于卫生问题的公告!!4"); model.addAttribute("title5", "关于卫生问题的公告!!5"); model.addAttribute("title6", "关于卫生问题的公告!!6"); // 查询全部文章信息 List<article> articles = liloucuncunweihuiServer.allArticle(); /** * 链表需要反转!! * 这里我们实现了对内容的更新,并且实现了把最新的内容放到了最前面 */ article article = liloucuncunweihuiServer.articleById(articles.size() + (1 - id)); model.addAttribute("article", article.getText()); return "article/article1"; }
- List链表反向遍历
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>31.0.1-jre</version> </dependency>
List<String> reversedList = Lists.reverse(list);
- 然后我们遍历reversedList,就是逆向输出。
- 数据库的表设置自增、那么我们如果利用Java的时候,那么我们只需要对sql语句进行整改就好
<insert id="addArticle" parameterType="String"> insert into article(title,text,date) values(#{title},#{text},#{date}) </insert>
- 在主键自增的数据库语句中,我们如果想对这个表进行新增。那么接口我们只需要写除了自增字段意外的字段即可。在Sql语句中,我们的参数类型是这个表对应的类。
//添加五好村民 public int addHero(String name,String groups,String date);
<insert id="addHero" parameterType="com.jsxs.pojo.hero"> insert into hero(name,groups,date) values(#{name},#{groups},#{date})

