Struts2 학습노트(5) - 매개 변수 전달 방법
매개 변수를 전달하는 방법이 비교적 많으니 일일이 설명하면 다음과 같다.
1. Action에서 직접 매개변수법
다음과 같은 index가 있습니다.jsp 파일
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
<base href="<%=basePath %>"/>
<title>Insert title here</title>
</head>
<body>
action <a href="user/user!add?name=a&age=8"> </a>
</body>
</html>
그 중의 에 대해 말하자면, 두 개의 매개 변수를 프로그램에 전달하는데, 하나는name이고, 하나는age이며, struts에 있다.xml의 구성은 다음과 같습니다.
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="user" extends="struts-default" namespace="/user">
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result>/user_add_success.jsp</result>
</action>
</package>
</struts>
이때 저희 User Action은 어떻게 써야 하나요?범례는 다음과 같습니다.package com.bjsxt.struts2.user.action;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private String name;
private int age;
public String add() {
System.out.println("name=" + name);
System.out.println("age=" + age);
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
간단합니다. 두 가지 속성을 정의했습니다. 주: 이 두 속성의 set과 get 방법은 반드시 써야 합니다. eclipse의 빠른 생성 방식을 사용할 수 있습니다. 매우 간단합니다.이렇게 하면 상술한 프로그램이 실행될 때 필요한 결과를 출력할 것이다name=a와 age=8.
설명은 다음과 같다. 첫째,struts2는 자동으로 매개 변수 전달을 하는데 이 과정은 우리가 참여할 필요가 없다.둘째, struts가 매개 변수를 전달할 때 set과 get 방법을 겨냥한 것이지name과age 속성이 아니다. 즉, 만약에 우리가 그 이름을username와 같은 다른 이름으로 수정한다면, 방법은 여전히 setName과 getName이면 전체 기능의 실현에 있어서 아무런 차이가 없고 약간 어색할 뿐이다.셋째, 가장 중요한 점은 만약에 많은 속성이 있다면 우리는 매우 많은 set과 get 방법을 필요로 한다. 이것은 매우 불편하기 때문에 다음과 같은 방식을 도입했다.
2. Action 클래스 객체 추가 방법
이때 우리 1의 속성은 모두 하나의 클래스에 귀속된다. 예를 들어 User
package com.bjsxt.struts2.user.model;
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
이렇게 해서 Action 클래스에서 쓰기가 쉬워졌어요.package com.bjsxt.struts2.user.action;
import com.bjsxt.struts2.user.model.User;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private User user;
public String add() {
System.out.println("name=" + user.getName());
System.out.println("age=" + user.getAge());
return SUCCESS;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
주: 이 때 우리는 사용자 대상을 수동으로 생성할 필요가 없습니다. 이 과정은 Struts2가 자동으로 완성합니다.그리고 이때의 URL도 수정해야 합니다. 즉, index의 라벨을 수정해야 합니다.
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
<base href="<%=basePath %>"/>
<title>Insert title here</title>
</head>
<body>
Domain Model <a href="user/user!add?user.name=a&user.age=8"> </a>
</body>
</html>
상술한 18행 부분으로 수정하다.다음은 Struts2 매개 변수 전달의 두 가지 방법을 설명했는데 그 중에서 두 번째 방법은 Domain Model, 도메인 모델이라고 불린다.속성을 저장하는 데 사용할 클래스를 새로 만듭니다.
다음은 모델 드라이브, 모델 드라이브라고 불리는 또 다른 방법을 설명합니다.
그것은 두 번째 방법과 매우 유사하다. 다른 것은 모두 같다. 단지 Action과 방문의 차이가 있을 뿐이다. 그의 Action은 다음과 같다.
package com.bjsxt.struts2.user.action;
import com.bjsxt.struts2.user.model.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class UserAction extends ActionSupport implements ModelDriven<User>{
private User user = new User();
public String add() {
System.out.println("name=" + user.getName());
System.out.println("age=" + user.getAge());
return SUCCESS;
}
@Override
public User getModel() {
return user;
}
}
이를 통해 모델Driven 인터페이스를 실현하고 범용 기술을 채택한 것을 알 수 있다.이런 방식으로 Struts2는 자동으로 하나의 대상을 실례화하지 않기 때문에 수동으로만 생성할 수 있습니다.이것은 모델 Driven 인터페이스의 getModel () 방법을 덮어썼는데, 그 역할은 클래스 대상을 되돌려주는 것이다.액세스는 두 번째 방법과 다릅니다.
ModelDriven 사용자 추가
그것은 결코 사용자를 채택하지 않았다.name의 방식, 이것도 왜 new의 대상을 필요로 하는 이유입니다.이런 방식의 기본적인 사상 과정은 다음과 같다. 먼저 Action이 URL을 해석하여 그 중의 매개 변수를 얻은 다음에 Action에 들어가서 이 Action이 모델Driven 인터페이스를 실현한 것을 발견하고 이때 모델Driven 인터페이스의 getModel 방법을 호출하여 클래스의 대상을 얻은 다음에 이런 set와 get 방법을 호출하여 매개 변수를 전송한다.
이런 방식은 Struts2의 MVC 사상, M---Model, V---View, C---Controller를 구현했다. 그러나 이런 방식은 매우 적게 사용되고 우리가 가장 많이 사용하는 것은 위의 두 번째 방식이다.
이상은 Struts2의 매개 변수 전달 방법의 전체 내용입니다. 여러분께 참고가 되고 저희를 많이 사랑해 주시기 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Struts2 Result 매개 변수 상세 정보서버에 제출하는 처리는 일반적으로 두 단계로 나눌 수 있다. Struts2가 지원하는 다양한 유형의 반환 결과는 다음과 같습니다. Chain Result Action 체인 작업 Dispatcher Result Fre...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.