나는 최근에 SSH를 배우고 있으며 $,%,%및#의 차이를 이해하지 못했습니다. 나는 작은 운동을했고 점차적으로 조금 이해했습니다. 내가 배운 것을 기록 할 것입니다.
다음 엔티티가 존재합니다.
공개 계급 사람 {private int id; 개인 문자열 이름; public int getid () {return id; } public person (int id, string name) {super (); this.id = id; 이름 = 이름; } public person () {super (); } public void setid (int id) {this.id = id; } public String getName () {return name; } public void setName (문자열 이름) {이름 = 이름; }} struts2의 조치에서 다음 코드가 작성됩니다.
@override public string execute ()는 예외 {// 응용 프로그램 사람 P = new Person (1, "zhangsan"); ActionContext.getContext (). getApplication (). put ( "person", p); // 세션 담당자 P1 = 새로운 사람 (3, "Wangwu"); ActionContext.getContext (). getSession (). put ( "person", p1); // 요청 사람 p2 = 새로운 사람 (2, "lisi"); ActionContext.getContext (). put ( "person", p2); // ServletContext Person P3 = 새로운 사람 (5, "Xiaoming"); ActionContext.getContext (). getContextMap (). put ( "person", p3); Person P4 = 새로운 사람 (3, "Wangwu"); ActionContext.getContext (). getValuestack (). push (p4); "성공"을 반환합니다. } 응용 프로그램, 세션, 요청, ServletContext, Valuestack에 개인 개체를 저장하십시오. 그런 다음 JSP에서는 다음과 같은 방식으로 얻을 수 있습니다.
개인 : <입력 유형 = "text"name = "name"value = "$ {person}" /> <br /> id : <input type = "text"name = "name"value = "$ {person.id}" /> <br /> name : <입력 유형 = "name"value = "$ {person.name}" />> <hr> 위 코드에서 얻은 개인 정보는 Xiaoming, 즉 ActionContext.getContext ()에 저장된 정보입니다. getContextMap (). $ 사용량을 쿼리함으로써 $ 객체를 얻는 방법이 있습니다.
actionContext.getContext (). getContextMap ()> actionContext.getContext ()> actionContext.getContext (). getSession ()> actionContext.getContext (). getApplication (). 이름이 같은 범위 (스코프)에 동일한 이름을 가진 객체의 경우 $의 검색 방법이 위의 단계에 따라 수행됩니다. 발견되면 출력됩니다. 발견되지 않으면 이전 수준에서 계속 검색합니다. 상단이 존재하지 않으면 NULL을 출력합니다.
그러면 $의 사용법은 : $ {scope.object.attribute}입니다.
범위의 속성 값은 요청, 세션, 응용 프로그램입니다. 기본적으로 작성되지 않은 경우 위의 체계에 따라 검색합니다. 당신이 그것을 찾으면, 당신은 관련 속성 값을 출력하게됩니다.
Struts 태그에서 a를 저장합니다.
<s : 속성 값 = "#application.person"/>
현재 # 번호가 사용되었음을 알 수 있습니다. 나는 개인적으로 #와 $의 사용이 실제로 동일하다고 생각합니다. 객체를로드하는 한 뷰에 표시 할 때 다른 범위에서 맵 (ServletContext, 요청, 세션 및 응용 프로그램)으로 출력해야합니다. 그러나 Struts 태그를 사용하면 예를 들어 :
<s : textfield name = "person.name"> </s : textfield>
완전히 이해할 수 있습니다
<입력 유형 = "text"name = "persom.name"id = "person.name"value = "<s : 속성 값 ="#person.name " />
즉, Struts 태그는 HTML 텍스트 <s : property value = "#target.name"/>에서 우리를 위해 캡슐화되어 많은 코드를 저장할 수 있습니다.
마찬가지로 #의 사용은 다음과 같습니다
물론 Struts2에서 정의한 태그를 사용하여 너무 많은 중복 코드를 작성하는 번거 로움을 저장할 수 있습니다. 실제로, #는지도와 같은 객체 구성과 같은 다른 용도를 가지고 있지만, 개인적으로 너무 많은 코드를 작성하는 시대는 통과 되었으며이 사용법은 의미가 없습니다. 또한 이번에는보기에 표시하는 과정 만 썼으므로 다른 곳에서는 이야기하지 않을 것입니다.
마지막으로 %사용에 대해 이야기 해 봅시다. 간단히 말해서, %{}는 문자열 계산 표현식입니다. 예를 들어,보기에는 일반적으로 CRUD와 같은 기본 기능이있는 특정 링크가 있습니다. 추가 및 업데이트 기능의 경우 같은 페이지에서 완료 할 수 있습니다. 차이점은 우리가 제출 한 주소가 다르다는 것입니다. 예를 들어 다음과 같은 것일 수 있습니다. ADD 메소드의 경우 주소는 user_add.action이고 UDPATE 메소드의 경우 주소는 user_update.action이므로 양식에서는 %를 판단하기 위해 사용할 수 있습니다.
<S : 양식 Action = "user _%{id == 0? 'add': 'update'}"> </form> 하하, 따라서 이전 두 페이지는 이제 한 페이지로 해결할 수 있습니다.
마찬가지로, %는 Struts의 IF 및 IFELSE와 같은 판단 라벨과 함께 더 자주 사용됩니다. 결국, 그것은 비교입니까? . . .
<s : test = "%{false}"> <div>가 실행되지 않으면 </div> </s : if> <s : elseif test = "%{true}"> <div> 실행됩니다 </div> </s : elseif> <s : else> <s> </div> </s : else> 마지막으로, 사용 된 %가 매우 간단한 경우 모든 학생들의 통과 성적 (즉, 실패한 성적이 위에서 표시되지 않음)을 보여주는 목록이 있다고 가정하면이 %의 유용한 접근 방식에 대해 이야기 해 봅시다. 아니요, 코드를 먼저 넣으십시오.
공공 클래스 stduent는 java.io.serializable을 구현합니다. {private static final long serialversionuid = -69103881475396419L; 개인 int ID; 개인 문자열 이름; 개인 INT 점수; 개인 문자열 주제; public int getid () {return id; } public void setid (int id) {this.id = id; } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } public int getscore () {반환 점수; } public void setScore (int score) {this.score = score; } public string getSubject () {return subject; } public void setSubject (문자열 주제) {this.subject = subject; } / ** * 여기서 우리는 점수가 시험을 통과하는지 판단 * @param socre * @return * / public boolean ispast (int socre) {return getscore ()> 60; }} 따라서 이제 데이터베이스에서 학생의 성적을 찾아 임시 저장소 목록에 넣으십시오. JSP 페이지에서 다음 코드를 사용하여 등급 시스템 출력이 통과되는지 여부를 제어 할 수 있습니다.
<s : iterator value = "#alluser"> <!- 라인을 전달할지 여부를 결정하고, 선을 전달하면 출력이됩니다. 그렇지 않으면 포기할 것입니다! -> <s : if test = "#session.user.ispast (score)"> 이름 : <s : 텍스트 필드 이름 = "name"> </s : textfield> 점수 : <s : textfield name = "score"> </s : textfield>/subject : <s : 텍스트 필드 이름 = "subject"> </s : textfield> </s : iTerator>
읽어 주셔서 감사합니다. 도움이되기를 바랍니다. 이 사이트를 지원 해주셔서 감사합니다!