2013-11-22 3 views
2

다른 사람의 Struts 2 코드를 이해하려고하는데 데이터 전달 문제가 있습니다.Struts 2가 JSP에서 액션 클래스로 데이터를 전달합니다.

JSP 페이지에서 <s:textfield name="something" ... /> 태그를 사용하면 struts2가 액션 클래스에서 setSomething(...)을 자동으로 호출하려고 시도한다는 것을 알고 있습니다.

<s:textfield name="item.name" ... /> 

내가 궁금 해서요, 어떻게 . (점)가 작동합니까 :

지금은 코드의 유형을보고 있어요? 내 작업 클래스에 setItem()라는 메서드가 있고 그 메서드에서 설정되는 개체는 setName() 메서드가 있지만 분명히 작동하지 않습니다. 항목과 이름 사이의 점은 무엇을 의미하며 항목을 올바르게 인스턴스화 할 때 어떻게 사용합니까 이름을 설정 했습니까?

추신 : 내 작업 클래스에서 setItem()에 설정중인 항목 개체에 빈 args 생성자가 있습니다.

답변

1

문제가 해결되었습니다. getItem()에는 실제로 다음 코드가 포함되어 있습니다.

public Item getItem() 
{ 
    System.out.println("Trying to get item: " + item.toString()); 
    return item; 
} 

그리고 item이 null이므로 nullpointer 예외가 발생했습니다. 오직,이 nullpointerexception은 struts 프레임 워크에서 다루지 않았습니다! 코드가 계속되었습니다 (물론 실패했습니다 ...). sysout 문을 제거하면 코드가 작동합니다.

2

OGNL .에서는 점 표기가입니다.

item.namegetItem().setName();
item.subitem.namegetItem().getSubitem.setName();

하나의 문제가없는 빈 인수 생성자, as described here 될 수 있음을 의미 의미하지만, 당신은 당신의 사건이 아니다 말; "Item에 대한 누락 된 게터"에 걸 겠어. 그렇지 않은 경우 관련 코드를 게시하십시오.

1

대신의 getItem의 예제의 getItem에 대한 어쩌면 방법 공개 또는 오타 가능 여부 없습니다 getItem().setName()

공개 방법은,()()이 있는지 확인합니다.

액션은 OGNL 표현처럼 name 속성 "item.name"에서 setItem(Item item)

1

Struts2 처리 값을 가져야한다. 그러나 평가 결과를 name 속성으로 대체하지 않고 설정하지 않은 경우 value 속성으로 대체합니다. 그런 다음 양식을 제출하면 name 속성의 매개 변수가 생성되어 HTTP 요청을 통해 전송됩니다. Struts2는 params 인터셉터를 사용하여 매개 변수 이름을 구문 분석했습니다. OGNL 표현식과 같은 이름을 처리하고 객체 및 설정 값에 액세스하는 동안 적절한 방법 getset을 호출합니다. OGNL 표현식의 점은 속성 확인자의 약자입니다. 귀하의 경우에는 getItem() 값을 설정하는 방법이 있어야하며이 항목은 null 값을 반환하지 않아야합니다. setItem()은 여기에 사용되지 않습니다. 왜 사용되지 않는지 물어볼 수는 있지만 아마도 다른 질문 일 것입니다.

관련 문제