다음 액션 클래스에서 매개 변수 인터셉터를 사용하고 있습니다. Struts 2의 매개 변수 인터셉터와 함께 mutator 및 접근 자 (setter/getters)가없는 매개 변수
@Namespace("/admin_side")
@ResultPath("/WEB-INF/content")
@ParentPackage(value = "struts-default")
@InterceptorRefs(@InterceptorRef(value="store", params={"operationMode", "AUTOMATIC"}))
public final class TestAction extends ActionSupport implements Serializable, ValidationAware, Preparable
{
private static final long serialVersionUID = 1L;
private String param1;
private String param2;
//Getters and setters.
public TestAction() {}
@Action(value = "TestMessage",
results = {
@Result(name=ActionSupport.SUCCESS, type="redirectAction", params={"namespace", "/admin_side", "actionName", "Test"}),
@Result(name = ActionSupport.INPUT, location = "Test.jsp")},
interceptorRefs={
@InterceptorRef(value="paramsPrepareParamsStack", params={"params.acceptParamNames", "param1, param2", "params.excludeParams", "extraParam", "validation.validateAnnotatedMethodOnly", "true"})
})
public String insert() {
// Do something. Add or update a row to the database (one at a time).
addActionMessage("Action message");
addActionError("Error message");
return ActionSupport.SUCCESS;
}
@Action(value = "Test",
results = {
@Result(name = ActionSupport.SUCCESS, location = "Test.jsp"),
@Result(name = ActionSupport.INPUT, location = "Test.jsp")},
interceptorRefs = {
@InterceptorRef(value = "paramsPrepareParamsStack", params = {"params.acceptParamNames", "param1, param2", "params.excludeParams", "extraParam", "validation.validateAnnotatedMethodOnly", "true", "validation.excludeMethods", "load"})})
public String load() throws Exception {
// This method is just required to return an initial view on page load.
return ActionSupport.SUCCESS;
}
@Override
public void prepare() throws Exception {}
}
다음
는<s:form>
입니다 : 여기
<s:form namespace="/admin_side" action="Test" validate="true" id="dataForm" name="dataForm">
<s:if test="hasActionMessages()">
<s:actionmessage theme="jquery"/>
</s:if>
<s:if test="hasActionErrors()">
<s:actionerror theme="jquery"/>
</s:if>
<s:hidden name="param1"/>
<s:hidden name="param2"/>
<s:hidden name="extraParam"/>
<s:submit value="Submit" action="TestMessage"/>
</s:form>
, extraParam
선언 결과적으로, 액션 클래스에는 세터와 게터가 없습니다되지 않은 숨겨진 양식 필드.
이 경우이 양식을 제출하면 서버 터미널에 다음 메시지가 나타납니다.
SEVERE : 개발자 알림 (false로 설정 struts.devMode는 이 메시지 비활성화) : '오류 설정 표현 클래스 actions.TestAction' ' 값 [와'extraParam 예기치 않은 예외가 에 'extraParam'을 설정 붙 잡았다 ']]
params.excludeParams
조치 클래스에서와 마찬가지로 매개 변수 extraParam
을 제외하지 않습니다.
매개 변수 인터셉터를 사용하는 동안 이러한 예외를 방지 할 수 있습니까? 이러한 메시지는 동작 메시지에 불필요하게 추가되고 사용되는 경우 <s:actionmessage/>
을 통해 표시됩니다 (전혀 표시되지 않아야 함). 이 paramsPrepareParamsStack
가 다음 작업 클래스에 defaultStack
로 대체
경우, 이러한 메시지가 표시되지 않습니다. 다음과 같이 경고합니다.
경고 : 매개 변수 [extraParam] 패턴의 excludeParams 목록에!
단지 말을하지 마십시오, 는 이러한 메시지를 해제하는 false
에 struts.devMode
을 설정합니다.
<interceptor-stack name="paramsPrepareParamsStack">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="checkbox"/>
<interceptor-ref name="multiselect"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*,^struts\..*</param>
</interceptor-ref>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="actionMappingParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*,^struts\..*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
2 params
인터셉터가 있습니다
매개 변수가 상속 된 이유는 무엇이라고 생각하십니까? –
"* 매개 변수가 상속 되나요? *"이해가 안됩니다! – Tiny
일부 구성이 있고 작업 또는 인터셉터에 대한 매개 변수가 있고 상위 패키지에서 매개 변수를 확장하면 클래스 또는 메소드에 주석을 지정하는 것과 같지 않게됩니다. –