2016-12-21 1 views
0

Моих распорок:Доступ к методам контроллера в JSP Java scriptlet вместо использования тегов? Конфигурация

<action name="myAction" class="my.controller.MyAction"> 
    <result name="myPage">/myPage.jsp</result> 

MyAction имеет метод public String getSomeValue() { ... }.

В myPage.jsp, я могу напечатать это значение легко в HTML поток:

<s:property value="someValue" /> 

Однако, я хотел бы, чтобы распечатать его на консоль:

<% 

//how do I reference myActionBean 
String someVal = myActionBean.getSomeValue(); 
System.out.println(someVal); 

%> 

Мой вопрос в том, как Я ссылаюсь на контроллер действия (замените myActionBean в коде выше) внутри кода кода JSP, точно так же, как тег s:property в своем синтаксисе, который исключает «получить» часть метода? Я хотел бы получить доступ к myActionBean.getSomeValue() в Java в JSP, а не делать это в теге. Я знаю, что это не рекомендуется делать, но это только для отладки.

+0

Я знаю, как сделать скриптлет. Вопрос находится в последнем абзаце сообщения. – amphibient

+0

'как я могу ссылаться на контроллер действий ... внутри кодового блока JSP?' – amphibient

+0

это просто для отладки. Мне нужно распечатать на консоль – amphibient

ответ

1

Как было предложено @DaveNewton, я был в состоянии получить доступ к классу действий из контекста:

<% 
    ActionContext context = ActionContext.getContext(); 

    //this will access actionClass.getFoo() just like the tag 
    //<s:property value="%{foo}"/> does but outputs to HTML 
    Object fooObj = context.getValueStack().findValue("foo"); 
    String fooStr = (String)fooObj; 

    //so that we can print it to the console 
    //because the tag can only output to HTML 
    //and printing to the console is the objective of the question 
    System.out.println("foo = " + fooStr); 
%> 

я имел для импорта ActionContext в верхней части JSP:

<%@ page import="com.opensymphony.xwork2.ActionContext" %> 

Я понимаю, что некоторым людям не нравится, что я должен это делать, но на самом деле именно то, что я хотел сделать. Я хорошо знаю, что мог сделать System.out в getFoo(), но я хотел сделать это в JSP.

+1

Хорошо, что вы это поняли +1. Не забудьте принять ваш ответ, это может помочь будущим посетителям. –

0

Вы можете получить бит действия от вызова действия, как вы это делаете в перехватчике, или из стека значений, где он уже нажат. Поскольку у вас есть доступ к стекю значений из JSP и вы знаете, как печатать свойство, проще всего установить компонент действия в атрибут запроса с тегом <s:set>.

<s:set var="action" value="action" scope="request"/> 

Теперь вы можете получить боб действия

<% 
    MyAction myActionBean = request.getAttribute("action"); 
    String someVal = myActionBean.getSomeValue(); 
    System.out.println(someVal); 
%> 
+0

Вы попробовали это решение? –

Смежные вопросы