Struts2 $,#,% 상세 정보 및 인스턴스 코드

6515 단어 Struts2$#%
최근에 ssh를 배우고 있는데 $,%,#의 차이를 잘 몰라요. 작은 연습을 했어요. 천천히 조금씩 알게 됐어요. 배운 것도 기록해 두세요.
엔티티 존재:

public class Person { 
 
  private int id ; 
  private String Name ; 
   
  public int getId() { 
    return id; 
  } 
   
  public Person(int id, String name) { 
    super(); 
    this.id = id; 
    Name = name; 
  } 
 
  public Person() { 
    super(); 
  } 
  public void setId(int id) { 
    this.id = id; 
  } 
  public String getName() { 
    return Name; 
  } 
  public void setName(String name) { 
    Name = name; 
  } 
 
} 
struts2의 Action에는 다음과 같은 코드가 있습니다.

@Override 
  public String execute() throws Exception { 
     
    //application  
    Person p = new Person(1,"zhangsan") ; 
    ActionContext.getContext().getApplication().put("person", p); 
     
    //session 
    Person p1 = new Person(3,"wangwu"); 
    ActionContext.getContext().getSession().put("person", p1); 
     
    //request 
    Person p2 = new Person(2,"lisi"); 
    ActionContext.getContext().put("person", p2) ; 
     
    //servletContext 
    Person p3 = new Person(5,"xiaoming"); 
    ActionContext.getContext().getContextMap().put("person", p3); 
     
    Person p4 = new Person(3,"wangwu"); 
    ActionContext.getContext().getValueStack().push(p4); 
     
    return "success"; 
  } 
각각 application,session,request,servletContext,valueStack에person 대상을 저장하면 JSP에서 다음과 같이 얻을 수 있습니다.

person: <input type="text" name="name" value="${person }" /><br />  
id: <input type="text" name="name" value="${person.id }" /><br />  
name: <input type="text" name="name" value="${person.name }" /><br /> 
<hr> 
위 코드에서 얻은 개인 정보 시xiaoming의, 즉 ActionContext.getContext().getContextMap () 에 저장된 정보는 $의 사용법을 조회하여 $가 대상을 얻는 방식이 있다는 것을 발견합니다. 즉,
ActionContext.getContext().getContextMap() > ActionContext.getContext() >ActionContext.getContext().getSession() >ActionContext.getContext().get Application (), 서로 다른 scope (범위) 에 같은 이름의 대상이 존재할 때, $의 검색 방식은 상기 절차에 따라 진행됩니다. 찾기는 출력하고, 찾기는 계속 이전 검색을 하지 않으며, 꼭대기에 존재하지 않을 때null를 출력합니다.
그러면 $의 사용법은: ${scope.object.attribute}
scope의 속성 값은request,session,application입니다. 기본적으로 쓰지 않을 때 상술한 방안에 따라 검색하여 관련 속성 값을 출력합니다.
struts 탭에 다음을 저장합니다.

이때 #호를 사용한 것을 알 수 있다. 개인적으로는 #와 $의 사용법은 완전히 같다. 출력이 필요한 대상을 서로 다른 범위의 맵(servletContext,request,session,application)에 넣으면view에서 보여줄 때 를 사용하면 $이해와 완전히 같다.하지만 struts의 탭을 사용할 때, 예를 들면:

<s:textfield name="person.name"></s:textfield> 
충분히 이해할 수 있다

<input type="text" name="persom.name" id="person.name" value="<s:property value="#person.name"/>" /> 
즉, struts의 라벨은 HTML의 text에 를 봉인되어 많은 코드를 줄일 수 있습니다.
같은 맥락에서 #의 용법은:
물론 struts2가 우리에게 정의한 라벨을 완전히 사용할 수 있습니다. 이렇게 하면 코드를 너무 많이 쓰는 번거로움을 완전히 줄일 수 있습니다.사실 #맵 등 대상을 구성하는 데 사용되는 다른 용법도 있지만 개인적으로view에서 코드를 너무 많이 쓰는 시대는 지났다. 이런 용법은 의미가 별로 없다. 게다가 이번에는view에서 보여주는 과정만 썼기 때문에 다른 부분은 상관없다.
마지막으로% 의 사용법을 조금 잡아서 간단하게 보면% {}는 문자열 계산 표현식이다. 예를 들어view에는 어떤 부분이 존재하고 일반적으로 CRUD 등 기본 기능이 존재한다.add와 uppdate 기능은 같은 페이지에서 완성할 수 있다. 서로 다른 것은 우리가 제출한 주소가 다르다. 예를 들어add 방법에 대해user_add.action,udpate 방법에 대한 주소는user_update.action, 그러면 form에서% 를 사용하여 판단할 수 있습니다.

<s:form action="user_%{ id == 0 ? 'add' : 'update' }"></form> 
허허, 이렇게 하면 이전의 두 페이지가 지금은 완전히 한 페이지로 해결될 수 있다.
같은 이치로,% 는 struts 중의if,ifelse 등 판단 라벨과 연합하여 비교적 많이 사용한다. 어쨌든 비교하는 것이냐...

<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 class Stduent implements java.io.Serializable{ 
   
  private static final long serialVersionUID = -691038814755396419L; 
  private int id ; 
  private String name ; 
  private int score ; 
  private String subject ; 
   
  public int getId() { 
    return id; 
  } 
  public void setId(int id) { 
    this.id = id; 
  } 
  public String getName() { 
    return name; 
  } 
  public void setName(String name) { 
    this.name = name; 
  } 
  public int getScore() { 
    return score; 
  } 
  public void setScore(int score) { 
    this.score = score; 
  } 
  public String getSubject() { 
    return subject; 
  } 
  public void setSubject(String subject) { 
    this.subject = subject; 
  } 
   
  /** 
   *   
   * @param socre 
   * @return 
   */ 
  public boolean isPast(int socre){ 
    return getScore() > 60 ; 
  } 
   
} 
그러면 현재 데이터베이스에서 학생 성적을 찾아list에 잠시 저장하고 JSP 페이지에서 우리는 다음과 같은 코드를 사용하여 성적제 출력의 합격 여부를 제어할 수 있다.

<s:iterator value="#allUser"> 
  <!--  , , ! --> 
    <s:if test="#session.user.isPast(score)"> 
        name: <s:textfield name="name"></s:textfield> 
        score: <s:textfield name="score"></s:textfield>\ 
        subject:<s:textfield name="subject"></s:textfield> 
    </s:if> 
</s:iterator> 
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기