2010-04-13 2 views
0

는 다음과 같은 일Struts2 : 액션 태그 여기

  1. 자신의 이름을 입력하고 제출하도록 사용자에게 요청을하는 작은 테스트 응용 프로그램입니다 - (index.jsp를가)의 index.jsp의 결과로
  2. 입니다 그/그녀의 혈액형을

index.jsp를

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="s" uri="/struts-tags" %> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
    <head> </head> 
    <body> 
    <form action="MyName"> 
    <s:textfield name="UserName" label="Enter Your Name"/> 
    <s:submit/> 
    </form><br> 
    </body> 
</html>  

struts.xml을 선택하는 사용자를 묻는 위해 welcome.jsp 페이지

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> 
<struts> 
<package name="module1" namespace="" extends="struts-default"> 
<action name="MyName" class="module1.User"> 
    <result>/Welcome.jsp</result> 
</action> 
<action name="Blood_Group" class="module1.SelectBloodGroup" method="bloodGroupList"/> 
</package> 

</struts> 

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="s" uri="/struts-tags" %> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
    <head> 

    </head> 

    <body> 
    <s:action name="Blood_Group" executeResult="false"/>  

    //***************here is the problem*************** 
    <s:select list="bglist" listKey="id" listValue="bg"/> 
    //*********************************************** 

    </body> 
</html> 

스트럿츠 위해 welcome.jsp SelectBloodGroup.java는

package module1; 

import java.util.ArrayList; 
import com.opensymphony.xwork2.ActionSupport; 
public class SelectBloodGroup extends ActionSupport{ 
    private ArrayList<BloodGroup> bglist; 

    public String bloodGroupList(){ 
     bglist = new ArrayList<BloodGroup>(); 
     bglist.add(new BloodGroup("1","A+")); 
     bglist.add(new BloodGroup("2","B+")); 
     bglist.add(new BloodGroup("3","AB+")); 
     bglist.add(new BloodGroup("4","O+")); 
     bglist.add(new BloodGroup("5","A-")); 
     bglist.add(new BloodGroup("6","B-")); 
     bglist.add(new BloodGroup("7","AB-")); 
     bglist.add(new BloodGroup("8","O-")); 
     return "SUCCESS"; 
    } 

    public ArrayList<BloodGroup> getBglist(){ 
     return bglist; 
    } 

} 
class BloodGroup{ 
    private String id; 
    private String bg; 

    BloodGroup(String id,String bg){ 
     this.id=id; 
     this.bg=bg; 
    } 

} 

콜렉션 또는 배열 또는 목록 또는 반복자로 bglist를 식별 할 수 없습니다. 파일에서 태그를 선택하십시오. 환영합니다 .jsp

코드에 어떤 문제가 있는지 자세히 설명해주십시오. 나에게 수정 된 버전을 보낼 수 있다면. <s:action> 태그가 작동하지 않는 이유는 무엇입니까?

내가 오후 1시 49분 19초 org.apache.catalina.core.ApplicationDispatcher 심한 호출 2010년 4월 13일

무엇입니까 오류입니다 : 서블릿, JSP에 대한의 Servlet.service() 예외 태그 'select', 필드 'list'를 던졌습니다. 목록 키 'bglist'는 컬렉션/배열 /지도/열거/반복자 유형으로 해결 될 수 없습니다. 예 : 사람 또는 사람들 {이름} - [알 수없는 위치]

답변

0

기본 struts2 흐름을 오해하고있는 것 같습니다.

페이지 welcome.jsp는 "MyName"(나쁜 이름, BTW) 작업에 대한 결과 페이지 (보기)입니다. 즉, welcome.jsp 페이지가 생성 될 때 "MyName"(class module1.User) 액션이 방금 "실행"되었고 해당 객체 (module1.User 클래스의 인스턴스)는 결과가 표시되면 "범위"(값 스택)를 표시합니다. 그래서 welcome.jsp는 module1.User 클래스의 "bglist"목록을 찾고 있습니다.

액션 매핑을 다시 생각해 봐야합니다.

0

(귀하의 혼란이 명세서에 관련 될 수있다 당신이 작업 결과로 JSP 페이지를 생각해야한다 ...이 아닌 다른 JSP를 "index.jsp에서의 결과로 위해 welcome.jsp 페이지입니다") bglist은 액션 SelectBloodGroup에 정의되어 있으며 문맥에 들어 가지 않습니다. 응용 프로그램의 흐름은 Index.jsp (제출) -> module1.User (Action) -> 환영입니다.jsp이므로 bglist도 인스턴스화되지 않았고 클래스 SelectBloodGroup이 호출되었습니다.

bglist를 Action에서 초기화하려면 module1.User에 bglist를 초기화하거나 jsp에서 값 목록을 하드 코딩 (있는 것처럼 보임)하거나 모범 사례로 제공 할 수도 있습니다 정적 값 (하드 코딩보다 더 나은)에 리소스 번들을 사용할 수 있습니다.

<select name="bgList" id="bgListId"> 
    <option value="1">Bpositive</option> 
    <option value="someValue">someLabel</option> 
</select> 

변수를 선언하면서 낙타 표기법 패턴을 사용 해보세요 :

당신이 아래의 코드를 사용할 수 있습니다 JSP로 선택 목록에서 하드 코딩 값을 제공합니다. 희망이 도움이됩니다.