Chcę wysłać ciąg jako odpowiedź na metodę xxPOST AJAX. Używam Struts2 do implementacji przetwarzania po stronie serwera. Ale nie mam pojęcia, jak wysłać wynik "typ" jako ciąg znaków i mapowanie, które należy wykonać, aby wysłać ciąg znaków z klasy działania struts2 do odpowiedzi AJAX.Powrót Typ wyniku String z Struts2
Odpowiedz
Możesz łatwo stworzyć prosty StringResult, rozszerzając StrutsResultSupport, ale nic nie jest wbudowane w framework, o ile wiem.
Oto implementacja że użyłem w przeszłości prostego StringResult:
public class StringResult extends StrutsResultSupport {
private static final Log log = LogFactory.getLog(StringResult.class);
private String charset = "utf-8";
private String property;
private String value;
private String contentType = "text/plain";
@Override
protected void doExecute(String finalLocation, ActionInvocation invocation)
throws Exception {
if (value == null) {
value = (String)invocation.getStack().findValue(conditionalParse(property, invocation));
}
if (value == null) {
throw new IllegalArgumentException("No string available in value stack named '" + property + "'");
}
if (log.isTraceEnabled()) {
log.trace("string property '" + property + "'=" + value);
}
byte[] b = value.getBytes(charset);
HttpServletResponse res = (HttpServletResponse) invocation.getInvocationContext().get(HTTP_RESPONSE);
res.setContentType(contentType + "; charset=" + charset);
res.setContentLength(b.length);
OutputStream out = res.getOutputStream();
try {
out.write(b);
out.flush();
} finally {
out.close();
}
}
public String getCharset() {
return charset;
}
public void setCharset(String charset) {
this.charset = charset;
}
public String getProperty() {
return property;
}
public void setProperty(String property) {
this.property = property;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getContentType() {
return contentType;
}
public void setContentType(String contentType) {
this.contentType = contentType;
}
}
Użyłem json plugin robić podobne rzeczy. Jeśli używasz, że można korzystać z następujących czynności, aby odsłonić jedną właściwość String w swoim działaniu:
<result name="success" type="json">
<param name="root">propertyToExpose</param>
</result>
Możesz mieć swój sposób działania powrotu nie wynik String, ale efektem typu StreamResult.
Innymi słowy:
class MyAction {
public StreamResult method() {
return new StreamResult(new ByteArrayInputStream("mystring".getBytes()));
}
}
Nie koniecznie trzeba zwracać ciąg od sposobu działania Struts2. Zawsze możesz zwrócić implementację interfejsu wyników z xwork.
kopia tego w klasie działania
private InputStream inputStream;
public InputStream getInputStream() {
return inputStream;
}
public String execute(){
inputStream = new StringBufferInputStream("some data to send for ajax response");
return SUCCESS;
}
Struts.xml
<action name=....>
<result type="stream">
<param name="contentType">text/html</param>
<param name="inputName">inputStream</param>
</result>
To działa, gdy chcemy wysłać pojedynczą dane w odpowiedzi
Co zrobić, aby uzyskać tę wartość ciągu w pomocy jsp page.plz. –
StringBufferInputStream jest przestarzałe. spróbuj zamiast tego: ByteArrayInputStream ("some ... response" .getBytes()); – fishjd
Prawdopodobnie oznaczało * powrót nowego StreamResult (nowy ByteArrayInputStream ("mystring" .getBytes())); * Pomogło to, dzięki –