我是初学者,通过Murach的Java Servlet和JSP阅读......通过示例。有点卡在这个Ch11简单购物车的例子。
我会在这里发布整个代码,但它真的很长。
我已将完整代码放在我的保管箱链接上:https://dl.dropboxusercontent.com/u/36625850/Ch11-JSTL.rar
问题:
CartServlet.java
if(quantity > 0)
cart.addItem(lineItem);
else if(quantity == 0)
cart.removeItem(lineItem);
session.setAttribute("cart", cart);
String url = "/cart.jsp";
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
这可能是一个愚蠢的问题。我注意到servlet If语句你不需要{}?为什么是这样?我的意思是普通的java if语句都需要{}所以为什么servlet会有所不同?
cart.java
public void addItem(LineItem item)
{
String code = item.getProduct().getCode();
int quantity = item.getQuantity();
for (int i = 0; i < items.size(); i++)
{
LineItem lineItem = items.get(i);
if (lineItem.getProduct().getCode().equals(code))
{
lineItem.setQuantity(quantity);
return;
}
}
items.add(item);
}
我不能遵循的是item.getProduct().getCode();
。我不确定这会输出什么。
答案 0 :(得分:2)
if-else子句(以及所有其他控制结构)在java中按块读取。
所以,如果你把
if(x>2)
System.out.println("a"); ==> this is the next block
System.out.println("b");
if(x<2)
{ ==> this is the next block
System.out.println("a");
System.out.println("b");
}
如果x == 1,
,则测试上面的代码in first if statement
prints --> "b"
in second if statement
prints --> "a"
"b"
另一个例子
if(x>2)
for(int i=0;i<100;i++) --> next block of if
for(int j=0;j<200;j++){ --> next block of first for
if(x>0)
Sysout("a"); --> next block of if
else
Sysout("b"); --> next block of else
}
在Java中,建议始终使用大括号。
关于你的第二个问题
item.getProduct().getCode();
项目是LineItem
对象。
你的班级肯定是
public class LineItem{
private Product product;
public Product getProduct(){
return product;
}
}
产品类
public class Product{
private String code;
public String getCode(){
return code;
}
}
答案 1 :(得分:1)
1)Servlet也是java代码,适用于核心java的规则也适用于Servlet。 {}用于将多个语句组合成单个块。 离。
if(condition)
statement 1;
statement 2;
在上面的示例中,只有当条件求值为true时,才会执行statement1。语句2不会成为if
语句的一部分,因此它将作为普通语句执行。
if(condition)
{
statement 1;
statement 2;
}
现在在上面的示例中,因为您在{}
中包含了statement1和statement 2,整个块将成为if
的一部分,并且只有if(condition)
求值为true时才会执行这两个语句。< / p>
2)if (lineItem.getProduct().getCode().equals(code)
在上面的语句lineItem.getProduct()
中返回product
个对象。
因此lineItem.getProduct()
变为product.getCode().equals(code)
。现在product.getCode()
返回代码对象。所以product.getCode().equals(code)
变为code.equals(code)
如果两者相等,则if
计算为真。
答案 2 :(得分:0)
例如
说condition
是真的
if(condition)
sttmnt1; // it will execute this only
sttmnt2; // this is out of if block
并且在以下情况下将执行sttmnt
if(condition){
sttmnt1;
sttmnt2;
}
所以在你的例子中
if(quantity > 0)
cart.addItem(lineItem);
else if(quantity == 0)
cart.removeItem(lineItem);
在if和else if条件下只有一个语句。所以没有必要使用{}
item.getProduct().getCode();
将返回什么,请检查LineItem
类的getProduct方法中返回的类对象。在返回的objec&lt; tt类类型中,检查磨损是getCode()
答案 3 :(得分:0)
Servlet Java代码只是常规的Java代码。没有括号的if
在常规Java中的工作方式相同。
您的LineItem
类有一个方法getProduct
,其返回值是一个具有getCode
方法的对象。此代码段的作用是将getProduct().getCode()
中所有条目的items
值与给定项目的值进行比较。如果它们中的任何一个匹配,则该函数会中断并返回。简而言之,此方法可确保getProduct().getCode()
集合中只有items
的不同值。
答案 4 :(得分:0)
您需要了解的是{}
使多个语句显示为一个块。
类似语句分组。
所以当你只有一个陈述时,你真的不需要{}
但是当你有多个陈述时,{}
是有用的。
答案 5 :(得分:0)
如果所有人的陈述相同。
没有单独的(Java Servlet if语句)。
如果只有一个语句要执行(当[if,else if,else,while,for])满足时,我们不需要使用{}(但不推荐,会出现可读性问题)
前:
if(condition){
System.out.println("hai"); // here only one statement is there to execute
}
与
相同 if(condition)
System.out.println("hai");
类似地
int i=1;
while(i++!=10){
System.out.println("hai");
}
与
相同 int i=1;
while(i++!=10)
System.out.println("hai");
在Java中,只有switch语句需要{},即使它有单个case语句