遇到的问题(电商)
算总账
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</title> <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"> </script> <script> $(function(){ $("#xx").click(function () { var tds = $("td"); var total = 0; for (var i = 1; i < tds.length; i += 2) { // total += tds.eq(i) total=total+parseFloat(tds.eq(i)[0].innerText.split('¥')[1]); } alert(total); }) }) </script> </head> <body> <table border="1"> <tr> <th>网站名</th> <th> 钱</th> </tr> <tr> <td>Google</td> <td> ¥5</td> </tr> <tr> <td>Baidu</td> <td> ¥1</td> </tr> <tr> <td>菜鸟教程</td> <td> ¥4</td> </tr> <tr> <td>淘宝</td> <td> ¥6</td> </tr> <tr> <td>Facebook</td> <td>¥2</td> </tr> </table> <button id="xx">修改所有P元素的内容</button> <input type="text" id="mm" value="22"> <p>这是另一个段落。</p> </body> </html>
以下是基于范围的 for 循环的一般格式:对数组遍历
for (dataType rangeVariable : array)
statement;
现在来仔细看一看该格式的各个部分:
- dataType:是范围变量的数据类型。它必须与数组元素的数据类型一样,或者是数组元素可以自动转换过来的类型。
- rangeVariable:是范围变量的名称。该变量将在循环迭代期间接收不同数组元素的值。在第一次循环迭代期间,它接收的是第一个元素的值;在第二次循环迭代期间,它接收的是第二个元素的值;以此类推。
- array:是要让该循环进行处理的数组的名称。该循环将对数组中的每个元素迭代一次。
int numbers[]={1,2,3};
for(int var : numbers)
{
cout << val << endl;
}
之前的项目用的integer,所以推荐实体类用integer
因为int如果设为空的话默认为0而Integer为Null.. Null对于程序来说比较好控制,可以做空值判断以及对数据做统一处理
盒子模型
Java语言支持一些特殊的转义字符序列。
lidom+="<li><a href=\"${pageContext.request.contextPath}/product/pageProduct.action?cid="+n.cid+"\">"+n.cname+"</a></li>";
符号 | 字符含义 |
---|---|
\n | 换行 (0x0a) |
\r | 回车 (0x0d) |
\f | 换页符(0x0c) |
\b | 退格 (0x08) |
\0 | 空字符 (0x0) |
\s | 空格 (0x20) |
\t | 制表符 |
\" | 双引号 |
\' | 单引号 |
\\ | 反斜杠 |
\ddd | 八进制字符 (ddd) |
\uxxxx | 16进制Unicode字符 (xxxx) |
1 <script> 2 //jQuery的入口函数 3 $(function () { 4 //发送异步请求到后台查询商品的类型 5 $.post("${pageContext.request.contextPath}/product/categoryAll.action",{},function (data) { 6 var lidom=""; 7 //循环后端返回的json类型数据 8 $.each(data,function (i,n) { 9 // console.log(n.cid+"----"+n.cname); 10 //累加节点标签 11 lidom+="<li><a href=\"${pageContext.request.contextPath}/product/pageProduct.action?cid="+n.cid+"\">"+n.cname+"</a></li>"; 12 }); 13 //将拼接好的li追加到ul中即可 14 $("#categoryMain").html(lidom); 15 },"json"); 16 }); 17 </script>
List与Map的选择
Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。
List:是存储单列数据的集合,存储的数据是有序并且是可以重复的
Map:存储双列数据的集合,通过键值对存储数据,存储 的数据是无序的,Key值不能重复,value值可以重复
//第二种遍历,使用迭代器 System.out.println("--------使用while的iterator-------"); Iterator<Hero> it= heros.iterator(); //从最开始的位置判断"下一个"位置是否有数据 //如果有就通过next取出来,并且把指针向下移动 //直到"下一个"位置没有数据 while(it.hasNext()){ Hero h = it.next(); System.out.println(h);
package cn.gb.test; import java.util.*; public class foreach { public static void main(String[] args) { list(); map(); } //遍历ArrayList static void list(){ List<String> list=new ArrayList<>(); list.add("hello"); list.add("world"); list.add("HAHAHA"); //第一种方法for-each 遍历List for (String s:list){ System.out.println(s); } //第二种方法迭代器 从第一个空的位置开始移向下一个 有就输出,直到最后一个位置返回为false 则迭代完毕 Iterator<String> it=list.iterator(); while (it.hasNext()){ System.out.println(it.next()); } } //遍历Map static void map(){ Map<String,String> map=new HashMap<>(); map.put("1","va1"); map.put("2","va2"); map.put("3","va3"); //第一种普遍使用,二次取值 通过Map.keySet遍历key和value for (String key:map.keySet()){ System.out.println(key+"-"+map.get(key)); } //第二种 通过Map.entrySet使用iterator遍历key和value Iterator<Map.Entry<String,String>> iterator=map.entrySet().iterator(); while (iterator.hasNext()){ Map.Entry<String,String> it=iterator.next(); System.out.println(it.getKey()+"--"+it.getValue()); } //第三种:推荐,尤其是容量大时通过Map.entrySet遍历key和value for (Map.Entry<String,String> entry:map.entrySet()){ System.out.println(entry.getKey()+"---"+entry.getValue()); } } }
进行订单项保存在session里面时,从前端传过来的pid和number需要穿入后台,此时我们可以采用List集合也可以采用Map集合,这步操作在进行保存在session上面是没有问题的,但是在后续的进行订单操作时候,保存在数据库表order_和orderitem里面时
JSP引擎将隐含的session对象暴露给开发者。由于提供了session对象,开发者就可以方便地存储或检索数据。
下表列出了session对象的一些重要方法:
S.N. | 方法 & 描述 |
---|---|
1 | public Object getAttribute(String name)
返回session对象中与指定名称绑定的对象,如果不存在则返回null |
2 | public Enumeration getAttributeNames()
返回session对象中所有的对象名称 |
3 | public long getCreationTime()
返回session对象被创建的时间, 以毫秒为单位,从1970年1月1号凌晨开始算起 |
4 | public String getId()
返回session对象的ID |
5 | public long getLastAccessedTime()
返回客户端最后访问的时间,以毫秒为单位,从1970年1月1号凌晨开始算起 |
6 | public int getMaxInactiveInterval()
返回最大时间间隔,以秒为单位,servlet 容器将会在这段时间内保持会话打开 |
7 | public void invalidate()
将session无效化,解绑任何与该session绑定的对象 |
8 | public boolean isNew()
返回是否为一个新的客户端,或者客户端是否拒绝加入session |
9 | public void removeAttribute(String name)
移除session中指定名称的对象 |
10 | public void setAttribute(String name, Object value)
使用指定的名称和值来产生一个对象并绑定到session中 |
11 | public void setMaxInactiveInterval(int interval)
用来指定时间,以秒为单位,servlet容器将会在这段时间内保持会话有效 |