/** * Build the code list for the given code and field: an object/field-specific code, a field-specific code, a plain * error code. * <p> * Arrays, Lists and Maps are resolved both for specific elements and the whole collection. * <p> * See the {@link DefaultMessageCodesResolver class level Javadoc} for details on the generated codes. * @return the list of codes */ public String[] resolveMessageCodes(String errorCode, String objectName, String field, Class<?> fieldType) { List<String> codeList = new ArrayList<>(); List<String> fieldList = new ArrayList<>(); buildFieldList(field, fieldList); for (String fieldInList : fieldList) { codeList.add(postProcessMessageCode(objectName + CODE_SEPARATOR + fieldInList + CODE_SEPARATOR + errorCode)); } int dotIndex = field.lastIndexOf('.'); if (dotIndex != -1) { buildFieldList(field.substring(dotIndex + 1), fieldList); } for (String fieldInList : fieldList) { codeList.add(postProcessMessageCode(fieldInList + CODE_SEPARATOR + errorCode)); } if (fieldType != null) { codeList.add(postProcessMessageCode(fieldType.getName() + CODE_SEPARATOR + errorCode)); } codeList.add(postProcessMessageCode(errorCode)); return StringUtils.toStringArray(codeList); }
/** * Post-process the given message code, built by this resolver. * <p> * The default implementation applies the specified prefix, if any. * @param code the message code as built by this resolver * @return the final message code to be returned * @see #setPrefix */ protected String postProcessMessageCode(String code) { return getPrefix() + code; }
public String[] resolveMessageCodes(String errorCode, String objectName) { return new String[] { postProcessMessageCode(objectName + CODE_SEPARATOR + errorCode), postProcessMessageCode(errorCode) }; }
public void testResolveObjectMessageCodesWithPrefix() { messageCodesResolver.setPrefix("validation."); String[] codes = messageCodesResolver.resolveMessageCodes("required", "testBean"); assertEquals(2, codes.length); assertEquals("validation.testBean.required", codes[0]); assertEquals("validation.required", codes[1]); }
public void testResumeEventBindingErrors() throws IOException { MockRequestControlContext context = new MockRequestControlContext(); context.putRequestParameter("_eventId", "submit"); context.putRequestParameter("integerProperty", "bogus 1"); context.putRequestParameter("dateProperty", "bogus 2"); BindBean bindBean = new BindBean(); StaticExpression modelObject = new StaticExpression(bindBean); modelObject.setExpressionString("bindBean"); context.getCurrentState().getAttributes().put("model", modelObject); context.getFlowScope().put("bindBean", bindBean); context.getMockExternalContext().setNativeContext(new MockServletContext()); context.getMockExternalContext().setNativeRequest(new MockHttpServletRequest()); context.getMockExternalContext().setNativeResponse(new MockHttpServletResponse()); context.getMockFlowExecutionContext().setKey(new MockFlowExecutionKey("c1v1")); org.springframework.web.servlet.View mvcView = new MockView(); AbstractMvcView view = new MockMvcView(mvcView, context); view.setExpressionParser(createExpressionParser()); view.setMessageCodesResolver(new WebFlowMessageCodesResolver()); context.setAlwaysRedirectOnPause(true); view.processUserEvent(); assertFalse(view.hasFlowEvent()); view.render(); assertEquals(context.getFlowScope().get("bindBean"), model.get("bindBean")); BindingModel bm = (BindingModel) model.get(BindingResult.MODEL_KEY_PREFIX + "bindBean"); assertNotNull(bm); assertEquals("bogus 1", bm.getFieldValue("integerProperty")); assertEquals("bogus 2", bm.getFieldValue("dateProperty")); }
public void testResolveObjectMessageCodes() { String[] codes = messageCodesResolver.resolveMessageCodes("required", "testBean"); assertEquals(2, codes.length); assertEquals("testBean.required", codes[0]); assertEquals("required", codes[1]); }
public String[] resolveMessageCodes(String errorCode, String objectName) { return new String[] { postProcessMessageCode(objectName + CODE_SEPARATOR + errorCode), postProcessMessageCode(errorCode) }; }
public void testResolveFieldMessageCodesWithPrefix() { messageCodesResolver.setPrefix("validation."); String[] codes = messageCodesResolver.resolveMessageCodes("required", "testBean", "foo", String.class); assertEquals(4, codes.length); assertEquals("validation.testBean.foo.required", codes[0]); assertEquals("validation.foo.required", codes[1]); assertEquals("validation.java.lang.String.required", codes[2]); assertEquals("validation.required", codes[3]); }
public void testResumeEventModelValidateOnBindingErrors() { MockRequestContext context = new MockRequestContext(); context.putRequestParameter("_eventId", "submit"); context.putRequestParameter("stringProperty", "foo"); context.putRequestParameter("integerProperty", "bogus"); context.putRequestParameter("dateProperty", "2007-01-01"); BindBean bindBean = new ValidatingBindBean(); StaticExpression modelObject = new StaticExpression(bindBean); modelObject.setExpressionString("bindBean"); context.getCurrentState().getAttributes().put("model", modelObject); context.getFlowScope().put("bindBean", bindBean); context.getMockExternalContext().setNativeContext(new MockServletContext()); context.getMockExternalContext().setNativeRequest(new MockHttpServletRequest()); context.getMockExternalContext().setNativeResponse(new MockHttpServletResponse()); context.getMockFlowExecutionContext().setKey(new MockFlowExecutionKey("c1v1")); org.springframework.web.servlet.View mvcView = new MockView(); AbstractMvcView view = new MockMvcView(mvcView, context); view.setExpressionParser(createExpressionParser()); view.setMessageCodesResolver(new WebFlowMessageCodesResolver()); view.processUserEvent(); assertFalse(view.hasFlowEvent()); assertTrue(bindBean.validationMethodInvoked); }
public void testResolveFieldMessageCodes() { String[] codes = messageCodesResolver.resolveMessageCodes("required", "testBean", "foo", String.class); assertEquals(4, codes.length); assertEquals("testBean.foo.required", codes[0]); assertEquals("foo.required", codes[1]); assertEquals("java.lang.String.required", codes[2]); assertEquals("required", codes[3]); }
/** * Build the code list for the given code and field: an object/field-specific code, a field-specific code, a plain * error code. * <p> * Arrays, Lists and Maps are resolved both for specific elements and the whole collection. * <p> * See the {@link DefaultMessageCodesResolver class level Javadoc} for details on the generated codes. * @return the list of codes */ public String[] resolveMessageCodes(String errorCode, String objectName, String field, Class<?> fieldType) { List<String> codeList = new ArrayList<>(); List<String> fieldList = new ArrayList<>(); buildFieldList(field, fieldList); for (String fieldInList : fieldList) { codeList.add(postProcessMessageCode(objectName + CODE_SEPARATOR + fieldInList + CODE_SEPARATOR + errorCode)); } int dotIndex = field.lastIndexOf('.'); if (dotIndex != -1) { buildFieldList(field.substring(dotIndex + 1), fieldList); } for (String fieldInList : fieldList) { codeList.add(postProcessMessageCode(fieldInList + CODE_SEPARATOR + errorCode)); } if (fieldType != null) { codeList.add(postProcessMessageCode(fieldType.getName() + CODE_SEPARATOR + errorCode)); } codeList.add(postProcessMessageCode(errorCode)); return StringUtils.toStringArray(codeList); }
/** * Post-process the given message code, built by this resolver. * <p> * The default implementation applies the specified prefix, if any. * @param code the message code as built by this resolver * @return the final message code to be returned * @see #setPrefix */ protected String postProcessMessageCode(String code) { return getPrefix() + code; }
AbstractMvcView view = new MockMvcView(mvcView, context); view.setExpressionParser(createExpressionParser()); view.setMessageCodesResolver(new WebFlowMessageCodesResolver()); context.setAlwaysRedirectOnPause(true); assertTrue(view.userEventQueued()); AbstractMvcView view2 = new MockMvcView(mvcView, context2); view2.setExpressionParser(createExpressionParser()); view2.setMessageCodesResolver(new WebFlowMessageCodesResolver()); view2.restoreState((ViewActionStateHolder) viewActionState); assertFalse(view2.userEventQueued());
public void testResolveFieldMessageCodesKeyedField() { String[] codes = messageCodesResolver.resolveMessageCodes("required", "testBean", "foo[0]", String.class); assertEquals(6, codes.length); assertEquals("testBean.foo[0].required", codes[0]); assertEquals("testBean.foo.required", codes[1]); assertEquals("foo[0].required", codes[2]); assertEquals("foo.required", codes[3]); assertEquals("java.lang.String.required", codes[4]); assertEquals("required", codes[5]); }
AbstractMvcView view = new MockMvcView(mvcView, context); view.setExpressionParser(createExpressionParser()); view.setMessageCodesResolver(new WebFlowMessageCodesResolver()); context.setAlwaysRedirectOnPause(true); assertTrue(view.userEventQueued()); AbstractMvcView view2 = new MockMvcView(mvcView, context2); view2.setExpressionParser(createExpressionParser()); view2.setMessageCodesResolver(new WebFlowMessageCodesResolver()); view2.restoreState((ViewActionStateHolder) viewActionState); assertFalse(view2.userEventQueued());
public void testResumeEventModelNoValidateOnBindingErrors() { MockRequestContext context = new MockRequestContext(); context.putRequestParameter("_eventId", "submit"); context.putRequestParameter("stringProperty", "foo"); context.putRequestParameter("integerProperty", "bogus"); context.putRequestParameter("dateProperty", "2007-01-01"); BindBean bindBean = new ValidatingBindBean(); StaticExpression modelObject = new StaticExpression(bindBean); modelObject.setExpressionString("bindBean"); context.getMockFlowExecutionContext().putAttribute("validateOnBindingErrors", false); context.getCurrentState().getAttributes().put("model", modelObject); context.getFlowScope().put("bindBean", bindBean); context.getMockExternalContext().setNativeContext(new MockServletContext()); context.getMockExternalContext().setNativeRequest(new MockHttpServletRequest()); context.getMockExternalContext().setNativeResponse(new MockHttpServletResponse()); context.getMockFlowExecutionContext().setKey(new MockFlowExecutionKey("c1v1")); org.springframework.web.servlet.View mvcView = new MockView(); AbstractMvcView view = new MockMvcView(mvcView, context); view.setExpressionParser(createExpressionParser()); view.setMessageCodesResolver(new WebFlowMessageCodesResolver()); view.processUserEvent(); assertFalse(view.hasFlowEvent()); assertFalse(bindBean.validationMethodInvoked); }