01 November 2016

Những vấn đề về Struts2 Framework

Những vấn đề về Struts2 Framework
//VD: về tạo nút bấm chỉnh sửa dữ liệu struts 2 (Hình ảnh phía trên) <%@taglib uri="/struts-tags" prefix="s"%> <s:form action="amend" method="POST"> <tr> <th>STT</th> <th>Emp Name</th> <th>Salary</th> <th>Depart</th> <th>Amend</th> <th><input type="submit" value="Amend"></th> </tr> <s:iterator var="L" value="list" status="No" begin="1" end="10" >//Có thể dùng Begin và End <tr> <td><s:property value="#No.count"/></td> //Đếm số thứ tự <td><s:property value="#L.employeename"/></td>//Lấy giá trị từ List <td><s:property value="#L.salary" /></td> <td><s:property value="#L.departmentname" /></td> <td><a href="amend?empID=<s:property value="%{empID}"/>"><input type="button" value="Amend"></a></td> <th><input type="radio" name="empID" value="<s:property value="%{empID}"/>"></th> </tr> </s:iterator> </s:form>
Welcome <s:property value="%{#session.logined}"/>
<s:if test="#session.logined != null">
      <s:url id="logout" action="logout" />
      <s:a href="%{logout}" >Logout</s:a>
</s:if>
//Tòn tại với lần gọi  
Map  request = (Map) ActionContext.getContext().get("request");
//Tồn tại trong cả phiên làm việc của máy tính
Map  session = ActionContext.getContext().getSession();
//Tồn tại trong suốt thời gian sống của server
Map  application = ActionContext.getContext().getApplication();

//Cách set giá trị cho Map
request.put("key", "value-string or object");
session.put("AN", accName);
request.put("loginFail", "Dang nhap that bai! Kiem tra lai accname hoac password");
//Cách get giá trị cho Map
request.get("key").toString();
String accN = session.get("AN").toString(); -> Java
<s:if test="#request.loginFail != null"> -> Jsp
 <!-- Thong bao login fail -->
 <font color="red"> <s:property value="#request.loginFail" /></font>
</s:if>
//Cách dùng ValueStack
ValueStack stack = ServletActionContext.getContext().getValueStack();
//Dùng Map để lưu giá trị theo key để dễ dàng lấy ra khi cần
Map<String, Object> context = new HashMap<String, Object>();
context.put("user","LonelyCat");
//Đẩy map vào ValueStack
stack.push(context);
//Hiển thị
<s:property value="user"/>
Chú ý: Sửa lỗi khi sử dụng Validation 
Chuyển trang không chạy
=============================================================
click vào đây để xem cách Validation XML (tôi thích dùng nó)
click vào đây để xem cách Validation @override method validate()
=========================================================================
- [1]  struts.xml bạn thêm 
<result name="input">amend.jsp</result>
- [2]  Thêm struts-config.xml
Copy file struts.xml vào WEB-INF paste và đổi tên thành struts-config.xml
=========================================================================
////////////////// Điểm chung nhất của validation //////////////////
=========================================================================
- [1] extends ActionSuppor
- [2] Trang jsp cần thêm thẻ <s:head/> để show message
<a href="detail?accName=<s:property value="#session.accName" />">
<input type="button" value="Xem thong tin da nhap">
</a>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>

   <package name="default" extends="struts-default" namespace="/">

       <action name="detail" class="com.demo.action.DetailA">
          <result name="success">detail.jsp</result>
          <result name="error">/detail.jsp</result>
       </action>

   </package>

</struts>
public class DetailA {
 private String accName;
 private Account acc;
// setter getter cho class Action cua struts2
 
 public String execute() {
  AccountDao a = new AccountDao();
  acc = a.viewDetail(accName);
  if (acc != null) {
   return "success";
  } else {
   return "error";
  }
 }
}
<%@ taglib prefix="s" uri="/struts-tags"%>

 Account Name: <s:property value="%{acc.accName}" /><br/>
 Password: <s:property value="%{acc.password}" /><br/>
 FirstName: <s:property value="%{acc.firstName}" /><br/>
 LastName: <s:property value="%{acc.lastName}" /><br/>
 Email: <s:property value="%{acc.email}" /><br/>
<s:if test="%{false}">
    <div>Will Not Be Executed</div>
</s:if>
<s:elseif test="%{true}">
    <div>Will Be Executed</div>
</s:elseif>
<s:else>
    <div>Will Not Be Executed</div>
</s:else>
public String execute() throws Exception {
        if ("admin".equals(userId) && "password".equals(passwd)) {
//            HttpSession session = ServletActionContext.getRequest().getSession();
//            session.setAttribute("logined","true");
//            session.setAttribute("context", new Date());
//            Better is using ActionContext 
            Map session = ActionContext.getContext().getSession();
            session.put("logined","admin");
            session.put("context", new Date());
            return SUCCESS;
        }
        return ERROR;
}

public String logout() throws Exception {
//        HttpSession session = ServletActionContext.getRequest().getSession();
//        session.removeAttribute("logined");
//        session.removeAttribute("context"); 
          Map session = ActionContext.getContext().getSession();
          session.remove("logined");
          session.remove("context");
        return SUCCESS;
}
<action name="refundmain" class="com.test.MainAction">           
    <result name="success" type="redirectAction" >refunfinfo.action</result>            
</action>
<action name="login" class="simple.LoginAction" >
    <result name="success" type="dispatcher">/pages/welcome.jsp</result>
    <result name="next" type="redirectAction">${nextAction}</result>
</action>
//Di chuyển đến trang mới url không có action.abc
<action name="logout" class="controller.LogoutAction">
     <result name="success" type="redirect">login.jsp</result>
</action>
<%@taglib uri="/struts-tags" prefix="s" %>
LoginAction.java
@Override
    public String execute() throws Exception {
        ProductDAO p = new ProductDAO();
        if (p.checkLogin(username, password)) {
            Map session = ActionContext.getContext().getSession();
            session.put("logined", username);
            list = p.getList();
            return "success";
        }
        return "fail";
}
welcome.jsp
<s:iterator var="L" value="list" status="number">
                <tr>
                    <td><s:property value="#number.count"/></td>
                    <td><s:property value="#L.id"/></td>
                    <td><s:property value="#L.name"/></td>
                    <td><s:property value="%{details}"/></td>
                </tr>
</s:iterator>
JSTL
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<c:forEach var="in" items="${list}" varStatus="count">
     <c:out value="${count.index}"/> //Đến số thứ tự
     <c:out value="${in.name}"/>
</c:forEach>

Hiển thị không cần login
 <% List<Product> L = (new ProductDAO()).getAll(); %>
 <% request.setAttribute("LT", L); %>
 <c:forEach items="${LT}" var="in">
 ....
 </c:forEach>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<c:forTokens items="Zara,nuha,roshy" delims="," var="name">
   <c:out value="${name}"/><p>
</c:forTokens>
@Override  
public String execute() {  
     return (user == null) ? INPUT : SUCCESS;  
}     
//Viết CSS cho struts 2  =>>  cssClass="button"
Tạo và Hiển thị thông báo cho người dùng biết
Display Message login fail Struts2
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport{

 private String username;
 private String password;
 //set and get

 //business logic
 public String execute() {
  return "SUCCESS";
 }

 //simple validation
 public void validate(){
      if("username".equals(getUsername())){
         addActionMessage("Succsess you are valid user!");
      }else{
         addActionError("I don't know you, dont try to hack me!");
      }
   }
}
show message >> login.jsp
<s:if test="hasActionErrors()">
   <div class="errors">
      <s:actionerror/>
   </div>
</s:if>
show message >> Welcome.jsp
<s:if test="hasActionMessages()">
   <div class="welcome">
      <s:actionmessage/>
   </div>
</s:if>
public void validate() {
       if (userName.isEmpty()) {
             addFieldError("userName", "Username can't be blank");
       }
       if (password.isEmpty()) {
             addFieldError("password", "Password Can't be blank");
       }
       else {
             addActionMessage("Welcome " + userName + ", You have been Successfully Logged in");
       }
    }
}
//Hiển thị kiểu Date thay property
<s:date name="#L.paymentDate" format="dd/MM/yyyy"/>
//Hiển thị số tiền theo định dạng 1,000.00
<s:property value="getText('{0,number,#,##0.00}',{#List.TotalAmt})" />
//Hiển thị định dạng tiền tệ struts 2
//Trong strust 2 có thể dùng thư viện JSTL
//Sử dụng API jstl-1.2.jsp tomcat v7.0 - Java 1.7
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<s:set var="paymentAmt" value="#List.paymentAmt"/>
<td><fmt:formatNumber pattern="#,##0.00" value="${paymentAmt}"/></td>
//Cần tìm hiểu về Token Iterceptor không cho call lại url gọi action double
Struts2 Token Interceptor
https://giai-ma.blogspot.com/2016/10/note-nhung-van-e-can-quan-tam-voi-jsp.html

0 nhận xét:

Post a Comment

 

BACK TO TOP

Xuống cuối trang