요구 사항:
배열 매개변수를 JS의 배경으로 전송
분석:
JS의 배열은 약한 유형이며 모든 유형(객체, 기본 유형)이 될 수 있습니다. array 넣는 것은 객체 종류인데, 백그라운드로 전달하면 객체 문자열만 표시됩니다 - [object Object] 이유는 다음과 같습니다.
백그라운드에서 수신할 때는 요청만 사용할 수 있으며, request.getParameterValues() 메소드 반환되는 것은 String[]이므로 포그라운드 전송 중에 객체의 toString() 메소드를 호출해야 합니다. 그렇다면 객체를 전달하려면 어떻게 해야 합니까? 샐러드!
그러나 JSON 문자열을 사용하여 구현할 수 있으며 JSON 문자열은 백그라운드에서 JAVA 개체로 구문 분석됩니다.
아마도 다음과 같이 복합 객체인 경우 무엇을 해야 할지 말하고 싶을 것입니다.
public class Person { private String username; private String password; private Address addr; }
Person 객체에는 Address 유형의 addr 속성이 없습니다. 중요하지 않습니다. 궁극적으로 모든 객체에서 사용되는 속성입니다. 값은 모두 기본 데이터 유형이며 해당 패키징 유형인 parsInt 또는 parsXXX를 사용하여 구문 분석하기만 하면 됩니다.
구현:
자, 이것이 원칙입니다. 먼저 JS 작성 방법을 살펴보겠습니다.
var as = []; var temp = []; for ( var int = 0; int < 5; int++) { temp.push('{"k":'); temp.push(int); temp.push(',"v":'); temp.push(int); temp.push('}'); as.push(temp.join("")); } //Jquery中的方法,具体参考Jquery API $.post( "servlet/AjaxServlet?m=putWarningRule",{"aa":as} );
최종 문자열은 다음 스타일입니다(예를 들어).
{"k":0,"v":0}
백그라운드 수신, 프레임워크는 논의되지 않고 HttpServletRequest만 논의됩니다. 하지만
String[] jsonArr = request.getParameterValues("aa[]");
한 가지 주의할 점은 js에서 매개변수를 전달할 때는 매개변수 이름이 "aa"이지만, 백그라운드에서 수신될 때는 "aa[]"라는 것입니다. Jquery는 여기서 변환을 수행해야 하므로 JS에서 "aa[]"로 변경하는 것이 가장 좋습니다. 여기에 "[]"가 기록되지 않은 이유는 문제를 설명하기 위한 것입니다. 다음 방법을 사용하여 요청의 모든 매개변수를 인쇄할 수 있습니다.
Enumeration<String> names = request.getParameterNames(); while (names.hasMoreElements()) { String string = (String) names.nextElement(); System.out.println(string); }
이제 수신이 완료되었습니다. 이제 JSON 문자열을 POJO로 변환하는 방법만 남았습니다. 저는 jsontools-core-1.7.jar을 사용합니다. 이 jar 패키지는 antlr-2.7.7.jar에 의존하며, 다운로드 후 클래스 경로를 가져오고 간단한 도구 클래스를 작성합니다. 메서드:
/** * 将对象转换为JSON格式的字符串 * @param obj * @return 返回JSON字符串 */ public static String toJSONAsString(Object obj){ try { return JSONMapper.toJSON(obj).render(false); } catch (MapperException e) { e.printStackTrace(); } return null; } @SuppressWarnings("unchecked") public static <T> T jsonToObject(String jsonStr, Class<T> targetClass) throws TokenStreamException, RecognitionException, MapperException{ JSONValue jv = new JSONParser(new StringReader(jsonStr)).nextValue(); return (T) JSONMapper.toJava(jv,targetClass); } //test public static void main(String[] args) throws Exception { Person p = new Person(); p.setK("a"); p.setV("v"); String json = toJSONAsString(p); Person np = jsonToObject(json,Person.class); System.out.println(np.getK()+"=="+np.getV()); }
요청은 값을 얻은 후 배열을 순회하고
Person p = JSONUtils.jsonToObject(jsonArr[0], Person.class);
Person 클래스를 다음과 같이 변환합니다.
public class Person { private String k; private String v; public String getK() { return k; } public void setK(String k) { this.k = k; } public String getV() { return v; } public void setV(String v) { this.v = v; } }
배열 매개변수를 배경으로 전달하는 jquery ajax 예제와 관련 기사를 더 보려면 PHP 중국어 웹사이트에 주목하세요!