1 16 17 package org.springframework.web.servlet.tags; 18 19 import java.beans.PropertyEditorSupport ; 20 import java.text.DateFormat ; 21 import java.text.SimpleDateFormat ; 22 import java.util.Date ; 23 import java.util.Set ; 24 25 import javax.servlet.jsp.JspException ; 26 import javax.servlet.jsp.PageContext ; 27 import javax.servlet.jsp.tagext.Tag ; 28 29 import org.springframework.beans.IndexedTestBean; 30 import org.springframework.beans.NestedTestBean; 31 import org.springframework.beans.TestBean; 32 import org.springframework.beans.propertyeditors.CustomDateEditor; 33 import org.springframework.validation.BindException; 34 import org.springframework.validation.DataBinder; 35 import org.springframework.web.bind.ServletRequestDataBinder; 36 import org.springframework.web.servlet.support.BindStatus; 37 38 42 public class BindTagTests extends AbstractTagTests { 43 44 public void testBindTagWithoutErrors() throws JspException { 45 PageContext pc = createPageContext(); 46 BindException errors = new ServletRequestDataBinder(new TestBean(), "tb").getErrors(); 47 pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors); 48 BindTag tag = new BindTag(); 49 tag.setPageContext(pc); 50 tag.setPath("tb"); 51 assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE); 52 BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 53 assertTrue("Has status variable", status != null); 54 assertTrue("Correct expression", status.getExpression() == null); 55 assertTrue("Correct value", status.getValue() == null); 56 assertTrue("Correct displayValue", "".equals(status.getDisplayValue())); 57 assertTrue("Correct isError", !status.isError()); 58 assertTrue("Correct errorCodes", status.getErrorCodes().length == 0); 59 assertTrue("Correct errorMessages", status.getErrorMessages().length == 0); 60 assertTrue("Correct errorCode", "".equals(status.getErrorCode())); 61 assertTrue("Correct errorMessage", "".equals(status.getErrorMessage())); 62 assertTrue("Correct errorMessagesAsString", "".equals(status.getErrorMessagesAsString(","))); 63 } 64 65 public void testBindTagWithGlobalErrors() throws JspException { 66 PageContext pc = createPageContext(); 67 BindException errors = new ServletRequestDataBinder(new TestBean(), "tb").getErrors(); 68 errors.reject("code1", null, "message1"); 69 pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors); 70 71 BindTag tag = new BindTag(); 72 tag.setPageContext(pc); 73 tag.setPath("tb"); 74 assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE); 75 BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 76 assertTrue("Has status variable", status != null); 77 assertTrue("Correct expression", status.getExpression() == null); 78 assertTrue("Correct value", status.getValue() == null); 79 assertTrue("Correct displayValue", "".equals(status.getDisplayValue())); 80 assertTrue("Correct isError", status.isError()); 81 assertTrue("Correct errorCodes", status.getErrorCodes().length == 1); 82 assertTrue("Correct errorMessages", status.getErrorMessages().length == 1); 83 assertTrue("Correct errorCode", "code1".equals(status.getErrorCode())); 84 assertTrue("Correct errorMessage", "message1".equals(status.getErrorMessage())); 85 assertTrue("Correct errorMessagesAsString", "message1".equals(status.getErrorMessagesAsString(","))); 86 87 tag = new BindTag(); 88 tag.setPageContext(pc); 89 tag.setPath("tb.*"); 90 assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE); 91 status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 92 assertTrue("Has status variable", status != null); 93 assertTrue("Correct expression", "*".equals(status.getExpression())); 94 assertTrue("Correct value", status.getValue() == null); 95 assertTrue("Correct displayValue", "".equals(status.getDisplayValue())); 96 assertTrue("Correct isError", status.isError()); 97 assertTrue("Correct errorCodes", status.getErrorCodes().length == 1); 98 assertTrue("Correct errorMessages", status.getErrorMessages().length == 1); 99 assertTrue("Correct errorCode", "code1".equals(status.getErrorCode())); 100 assertTrue("Correct errorMessage", "message1".equals(status.getErrorMessage())); 101 assertTrue("Correct errorMessagesAsString", "message1".equals(status.getErrorMessagesAsString(","))); 102 } 103 104 public void testBindStatusGetErrorMessagesAsString() throws JspException { 105 PageContext pc = createPageContext(); 107 BindException errors = new ServletRequestDataBinder(new TestBean(), "tb").getErrors(); 108 errors.reject("code1", null, "message1"); 109 pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors); 110 BindTag tag = new BindTag(); 111 tag.setPageContext(pc); 112 tag.setPath("tb"); 113 tag.doStartTag(); 114 BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 115 assertEquals("Error messages String should be 'message1'", 116 status.getErrorMessagesAsString(","), "message1"); 117 118 pc = createPageContext(); 120 errors = new ServletRequestDataBinder(new TestBean(), "tb").getErrors(); 121 errors.reject("code1", null, "message1"); 122 errors.reject("code1", null, "message2"); 123 pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors); 124 tag = new BindTag(); 125 tag.setPageContext(pc); 126 tag.setPath("tb"); 127 tag.doStartTag(); 128 status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 129 assertEquals("Error messages String should be 'message1,message2'", 130 status.getErrorMessagesAsString(","), "message1,message2"); 131 132 pc = createPageContext(); 134 errors = new ServletRequestDataBinder(new TestBean(), "tb").getErrors(); 135 pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors); 136 tag = new BindTag(); 137 tag.setPageContext(pc); 138 tag.setPath("tb"); 139 tag.doStartTag(); 140 status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 141 assertEquals("Error messages String should be ''", status.getErrorMessagesAsString(","), ""); 142 } 143 144 public void testBindTagWithFieldErrors() throws JspException { 145 PageContext pc = createPageContext(); 146 TestBean tb = new TestBean(); 147 tb.setName("name1"); 148 BindException errors = new ServletRequestDataBinder(tb, "tb").getErrors(); 149 errors.rejectValue("name", "code1", "message & 1"); 150 errors.rejectValue("name", "code2", "message2"); 151 errors.rejectValue("age", "code2", "message2"); 152 pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors); 153 154 BindTag tag = new BindTag(); 155 tag.setPageContext(pc); 156 tag.setPath("tb.name"); 157 tag.setHtmlEscape("true"); 158 assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE); 159 BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 160 assertTrue("Has status variable", status != null); 161 assertTrue("Correct expression", "name".equals(status.getExpression())); 162 assertTrue("Correct value", "name1".equals(status.getValue())); 163 assertTrue("Correct displayValue", "name1".equals(status.getDisplayValue())); 164 assertTrue("Correct isError", status.isError()); 165 assertTrue("Correct errorCodes", status.getErrorCodes().length == 2); 166 assertTrue("Correct errorMessages", status.getErrorMessages().length == 2); 167 assertTrue("Correct errorCode", "code1".equals(status.getErrorCode())); 168 assertTrue("Correct errorCode", "code1".equals(status.getErrorCodes()[0])); 169 assertTrue("Correct errorCode", "code2".equals(status.getErrorCodes()[1])); 170 assertTrue("Correct errorMessage", "message & 1".equals(status.getErrorMessage())); 171 assertTrue("Correct errorMessage", "message & 1".equals(status.getErrorMessages()[0])); 172 assertTrue("Correct errorMessage", "message2".equals(status.getErrorMessages()[1])); 173 assertTrue("Correct errorMessagesAsString", 174 "message & 1 - message2".equals(status.getErrorMessagesAsString(" - "))); 175 176 tag = new BindTag(); 177 tag.setPageContext(pc); 178 tag.setPath("tb.age"); 179 assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE); 180 status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 181 assertTrue("Has status variable", status != null); 182 assertTrue("Correct expression", "age".equals(status.getExpression())); 183 assertTrue("Correct value", new Integer (0).equals(status.getValue())); 184 assertTrue("Correct displayValue", "0".equals(status.getDisplayValue())); 185 assertTrue("Correct isError", status.isError()); 186 assertTrue("Correct errorCodes", status.getErrorCodes().length == 1); 187 assertTrue("Correct errorMessages", status.getErrorMessages().length == 1); 188 assertTrue("Correct errorCode", "code2".equals(status.getErrorCode())); 189 assertTrue("Correct errorMessage", "message2".equals(status.getErrorMessage())); 190 assertTrue("Correct errorMessagesAsString", "message2".equals(status.getErrorMessagesAsString(" - "))); 191 192 tag = new BindTag(); 193 tag.setPageContext(pc); 194 tag.setPath("tb.*"); 195 assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE); 196 status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 197 assertTrue("Has status variable", status != null); 198 assertTrue("Correct expression", "*".equals(status.getExpression())); 199 assertTrue("Correct value", status.getValue() == null); 200 assertTrue("Correct displayValue", "".equals(status.getDisplayValue())); 201 assertTrue("Correct isError", status.isError()); 202 assertTrue("Correct errorCodes", status.getErrorCodes().length == 3); 203 assertTrue("Correct errorMessages", status.getErrorMessages().length == 3); 204 assertTrue("Correct errorCode", "code1".equals(status.getErrorCode())); 205 assertTrue("Correct errorCode", "code1".equals(status.getErrorCodes()[0])); 206 assertTrue("Correct errorCode", "code2".equals(status.getErrorCodes()[1])); 207 assertTrue("Correct errorCode", "code2".equals(status.getErrorCodes()[2])); 208 assertTrue("Correct errorMessage", "message & 1".equals(status.getErrorMessage())); 209 assertTrue("Correct errorMessage", "message & 1".equals(status.getErrorMessages()[0])); 210 assertTrue("Correct errorMessage", "message2".equals(status.getErrorMessages()[1])); 211 assertTrue("Correct errorMessage", "message2".equals(status.getErrorMessages()[2])); 212 } 213 214 public void testBindTagWithNestedFieldErrors() throws JspException { 215 PageContext pc = createPageContext(); 216 TestBean tb = new TestBean(); 217 tb.setName("name1"); 218 TestBean spouse = new TestBean(); 219 spouse.setName("name2"); 220 tb.setSpouse(spouse); 221 BindException errors = new ServletRequestDataBinder(tb, "tb").getErrors(); 222 errors.rejectValue("spouse.name", "code1", "message1"); 223 pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors); 224 BindTag tag = new BindTag(); 225 tag.setPageContext(pc); 226 pc.setAttribute("myattr", "tb.spouse.name"); 227 tag.setPath("${myattr}"); 228 assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE); 229 BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 230 assertTrue("Has status variable", status != null); 231 assertTrue("Correct expression", "spouse.name".equals(status.getExpression())); 232 assertTrue("Correct value", "name2".equals(status.getValue())); 233 assertTrue("Correct displayValue", "name2".equals(status.getDisplayValue())); 234 assertTrue("Correct isError", status.isError()); 235 assertTrue("Correct errorCodes", status.getErrorCodes().length == 1); 236 assertTrue("Correct errorMessages", status.getErrorMessages().length == 1); 237 assertTrue("Correct errorCode", "code1".equals(status.getErrorCode())); 238 assertTrue("Correct errorMessage", "message1".equals(status.getErrorMessage())); 239 assertTrue("Correct errorMessagesAsString", "message1".equals(status.getErrorMessagesAsString(" - "))); 240 } 241 242 public void testPropertyExposing() throws JspException { 243 PageContext pc = createPageContext(); 244 TestBean tb = new TestBean(); 245 tb.setName("name1"); 246 BindException errors = new BindException(tb, "tb"); 247 errors.rejectValue("name", "code1", null, "message & 1"); 248 errors.rejectValue("name", "code2", null, "message2"); 249 pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors); 250 251 BindTag tag = new BindTag(); 253 tag.setPageContext(pc); 254 tag.setPath("tb"); 255 assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE); 256 assertNull(tag.getProperty()); 257 258 tag.release(); 260 tag.setPageContext(pc); 261 tag.setPath("tb.name"); 262 assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE); 263 assertEquals("name", tag.getProperty()); 264 } 265 266 public void testBindTagWithIndexedProperties() throws JspException { 267 PageContext pc = createPageContext(); 268 IndexedTestBean tb = new IndexedTestBean(); 269 BindException errors = new ServletRequestDataBinder(tb, "tb").getErrors(); 270 errors.rejectValue("array[0]", "code1", "message1"); 271 errors.rejectValue("array[0]", "code2", "message2"); 272 pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors); 273 274 BindTag tag = new BindTag(); 275 tag.setPageContext(pc); 276 tag.setPath("tb.array[0]"); 277 assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE); 278 BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 279 assertTrue("Has status variable", status != null); 280 assertTrue("Correct expression", "array[0]".equals(status.getExpression())); 281 assertTrue("Value is TestBean", status.getValue() instanceof TestBean); 282 assertTrue("Correct value", "name0".equals(((TestBean) status.getValue()).getName())); 283 assertTrue("Correct isError", status.isError()); 284 assertTrue("Correct errorCodes", status.getErrorCodes().length == 2); 285 assertTrue("Correct errorMessages", status.getErrorMessages().length == 2); 286 assertTrue("Correct errorCode", "code1".equals(status.getErrorCodes()[0])); 287 assertTrue("Correct errorCode", "code2".equals(status.getErrorCodes()[1])); 288 assertTrue("Correct errorMessage", "message1".equals(status.getErrorMessages()[0])); 289 assertTrue("Correct errorMessage", "message2".equals(status.getErrorMessages()[1])); 290 } 291 292 public void testBindTagWithMappedProperties() throws JspException { 293 PageContext pc = createPageContext(); 294 IndexedTestBean tb = new IndexedTestBean(); 295 BindException errors = new ServletRequestDataBinder(tb, "tb").getErrors(); 296 errors.rejectValue("map[key1]", "code1", "message1"); 297 errors.rejectValue("map[key1]", "code2", "message2"); 298 pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors); 299 300 BindTag tag = new BindTag(); 301 tag.setPageContext(pc); 302 tag.setPath("tb.map[key1]"); 303 assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE); 304 BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 305 assertTrue("Has status variable", status != null); 306 assertTrue("Correct expression", "map[key1]".equals(status.getExpression())); 307 assertTrue("Value is TestBean", status.getValue() instanceof TestBean); 308 assertTrue("Correct value", "name4".equals(((TestBean) status.getValue()).getName())); 309 assertTrue("Correct isError", status.isError()); 310 assertTrue("Correct errorCodes", status.getErrorCodes().length == 2); 311 assertTrue("Correct errorMessages", status.getErrorMessages().length == 2); 312 assertTrue("Correct errorCode", "code1".equals(status.getErrorCodes()[0])); 313 assertTrue("Correct errorCode", "code2".equals(status.getErrorCodes()[1])); 314 assertTrue("Correct errorMessage", "message1".equals(status.getErrorMessages()[0])); 315 assertTrue("Correct errorMessage", "message2".equals(status.getErrorMessages()[1])); 316 } 317 318 public void testBindTagWithIndexedPropertiesAndCustomEditor() throws JspException { 319 PageContext pc = createPageContext(); 320 IndexedTestBean tb = new IndexedTestBean(); 321 DataBinder binder = new ServletRequestDataBinder(tb, "tb"); 322 binder.registerCustomEditor(TestBean.class, null, new PropertyEditorSupport () { 323 public String getAsText() { 324 return "something"; 325 } 326 }); 327 BindException errors = binder.getErrors(); 328 errors.rejectValue("array[0]", "code1", "message1"); 329 errors.rejectValue("array[0]", "code2", "message2"); 330 pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors); 331 332 BindTag tag = new BindTag(); 333 tag.setPageContext(pc); 334 tag.setPath("tb.array[0]"); 335 assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE); 336 BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 337 assertTrue("Has status variable", status != null); 338 assertTrue("Correct expression", "array[0]".equals(status.getExpression())); 339 assertTrue("Value is TestBean", status.getValue() instanceof String ); 341 assertTrue("Correct value", "something".equals(status.getValue())); 342 } 343 344 public void testBindTagWithToStringAndHtmlEscaping() throws JspException { 345 PageContext pc = createPageContext(); 346 BindTag tag = new BindTag(); 347 tag.setPageContext(pc); 348 tag.setPath("tb.doctor"); 349 tag.setHtmlEscape("true"); 350 TestBean tb = new TestBean("somebody", 99); 351 NestedTestBean ntb = new NestedTestBean("juergen&eva"); 352 tb.setDoctor(ntb); 353 pc.getRequest().setAttribute("tb", tb); 354 tag.doStartTag(); 355 BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 356 assertEquals("doctor", status.getExpression()); 357 assertTrue(status.getValue() instanceof NestedTestBean); 358 assertTrue(status.getDisplayValue().indexOf("juergen&eva") != -1); 359 } 360 361 public void testBindTagWithSetValueAndHtmlEscaping() throws JspException { 362 PageContext pc = createPageContext(); 363 BindTag tag = new BindTag(); 364 tag.setPageContext(pc); 365 tag.setPath("tb.someSet"); 366 tag.setHtmlEscape("true"); 367 pc.getRequest().setAttribute("tb", new TestBean("juergen&eva", 99)); 368 tag.doStartTag(); 369 BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 370 assertEquals("someSet", status.getExpression()); 371 assertTrue(status.getValue() instanceof Set ); 372 } 373 374 public void testBindTagWithFieldButWithoutErrorsInstance() throws JspException { 375 PageContext pc = createPageContext(); 376 BindTag tag = new BindTag(); 377 tag.setPageContext(pc); 378 tag.setPath("tb.name"); 379 pc.getRequest().setAttribute("tb", new TestBean("juergen&eva", 99)); 380 tag.doStartTag(); 381 BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 382 assertEquals("name", status.getExpression()); 383 assertEquals("juergen&eva", status.getValue()); 384 } 385 386 public void testBindTagWithFieldButWithoutErrorsInstanceAndHtmlEscaping() throws JspException { 387 PageContext pc = createPageContext(); 388 BindTag tag = new BindTag(); 389 tag.setPageContext(pc); 390 tag.setPath("tb.name"); 391 tag.setHtmlEscape("true"); 392 pc.getRequest().setAttribute("tb", new TestBean("juergen&eva", 99)); 393 tag.doStartTag(); 394 BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 395 assertEquals("name", status.getExpression()); 396 assertEquals("juergen&eva", status.getValue()); 397 } 398 399 public void testBindTagWithBeanButWithoutErrorsInstance() throws JspException { 400 PageContext pc = createPageContext(); 401 BindTag tag = new BindTag(); 402 tag.setPageContext(pc); 403 tag.setPath("tb"); 404 pc.getRequest().setAttribute("tb", new TestBean("juergen", 99)); 405 tag.doStartTag(); 406 BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 407 assertNull(status.getExpression()); 408 assertNull(status.getValue()); 409 } 410 411 public void testBindTagWithoutBean() throws JspException { 412 PageContext pc = createPageContext(); 413 BindTag tag = new BindTag(); 414 tag.setPageContext(pc); 415 tag.setPath("tb"); 416 try { 417 tag.doStartTag(); 418 fail("Should have thrown JspException"); 419 } 420 catch (JspException ex) { 421 } 423 } 424 425 426 public void testBindErrorsTagWithoutErrors() throws JspException { 427 PageContext pc = createPageContext(); 428 BindException errors = new ServletRequestDataBinder(new TestBean(), "tb").getErrors(); 429 pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors); 430 BindErrorsTag tag = new BindErrorsTag(); 431 tag.setPageContext(pc); 432 tag.setName("tb"); 433 assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.SKIP_BODY); 434 assertTrue("Doesn't have errors variable", pc.getAttribute(BindErrorsTag.ERRORS_VARIABLE_NAME) == null); 435 } 436 437 public void testBindErrorsTagWithErrors() throws JspException { 438 PageContext pc = createPageContext(); 439 BindException errors = new ServletRequestDataBinder(new TestBean(), "tb").getErrors(); 440 errors.reject("test", null, "test"); 441 pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors); 442 BindErrorsTag tag = new BindErrorsTag(); 443 tag.setPageContext(pc); 444 tag.setName("tb"); 445 assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.EVAL_BODY_INCLUDE); 446 assertTrue("Has errors variable", pc.getAttribute(BindErrorsTag.ERRORS_VARIABLE_NAME) == errors); 447 } 448 449 public void testBindErrorsTagWithoutBean() throws JspException { 450 PageContext pc = createPageContext(); 451 BindErrorsTag tag = new BindErrorsTag(); 452 tag.setPageContext(pc); 453 tag.setName("tb"); 454 assertTrue("Correct doStartTag return value", tag.doStartTag() == Tag.SKIP_BODY); 455 } 456 457 458 public void testNestedPathDoEndTag() throws JspException { 459 PageContext pc = createPageContext(); 460 NestedPathTag tag = new NestedPathTag(); 461 tag.setPath("foo"); 462 tag.setPageContext(pc); 463 tag.doStartTag(); 464 int returnValue = tag.doEndTag(); 465 assertEquals(Tag.EVAL_PAGE, returnValue); 466 assertEquals("", pc.getAttribute(NestedPathTag.NESTED_PATH_VARIABLE_NAME, PageContext.REQUEST_SCOPE)); 467 } 468 469 public void testNestedPathDoEndTagWithNesting() throws JspException { 470 PageContext pc = createPageContext(); 471 NestedPathTag tag = new NestedPathTag(); 472 tag.setPath("foo"); 473 tag.setPageContext(pc); 474 tag.doStartTag(); 475 476 NestedPathTag anotherTag = new NestedPathTag(); 477 anotherTag.setPageContext(pc); 478 anotherTag.setPath("bar"); 479 anotherTag.doStartTag(); 480 anotherTag.doEndTag(); 481 482 assertEquals("foo.", pc.getAttribute(NestedPathTag.NESTED_PATH_VARIABLE_NAME, PageContext.REQUEST_SCOPE)); 483 484 tag.doEndTag(); 485 assertEquals("", pc.getAttribute(NestedPathTag.NESTED_PATH_VARIABLE_NAME, PageContext.REQUEST_SCOPE)); 486 } 487 488 public void testNestedPathDoStartTagInternal() throws JspException { 489 PageContext pc = createPageContext(); 490 NestedPathTag tag = new NestedPathTag(); 491 tag.setPath("foo"); 492 tag.setPageContext(pc); 493 int returnValue = tag.doStartTag(); 494 495 assertEquals(Tag.EVAL_BODY_INCLUDE, returnValue); 496 assertEquals("foo.", pc.getAttribute(NestedPathTag.NESTED_PATH_VARIABLE_NAME, PageContext.REQUEST_SCOPE)); 497 } 498 499 public void testNestedPathDoStartTagInternalWithNesting() throws JspException { 500 PageContext pc = createPageContext(); 501 NestedPathTag tag = new NestedPathTag(); 502 tag.setPath("foo"); 503 tag.setPageContext(pc); 504 tag.doStartTag(); 505 assertEquals("foo.", pc.getAttribute(NestedPathTag.NESTED_PATH_VARIABLE_NAME, PageContext.REQUEST_SCOPE)); 506 507 NestedPathTag anotherTag = new NestedPathTag(); 508 anotherTag.setPageContext(pc); 509 anotherTag.setPath("bar"); 510 anotherTag.doStartTag(); 511 512 assertEquals("foo.bar.", pc.getAttribute(NestedPathTag.NESTED_PATH_VARIABLE_NAME, PageContext.REQUEST_SCOPE)); 513 514 NestedPathTag yetAnotherTag = new NestedPathTag(); 515 yetAnotherTag.setPageContext(pc); 516 yetAnotherTag.setPath("boo"); 517 yetAnotherTag.doStartTag(); 518 519 assertEquals("foo.bar.boo.", pc.getAttribute(NestedPathTag.NESTED_PATH_VARIABLE_NAME, PageContext.REQUEST_SCOPE)); 520 521 yetAnotherTag.doEndTag(); 522 523 NestedPathTag andAnotherTag = new NestedPathTag(); 524 andAnotherTag.setPageContext(pc); 525 andAnotherTag.setPath("boo2"); 526 andAnotherTag.doStartTag(); 527 528 assertEquals("foo.bar.boo2.", pc.getAttribute(NestedPathTag.NESTED_PATH_VARIABLE_NAME, PageContext.REQUEST_SCOPE)); 529 } 530 531 public void testNestedPathWithBindTag() throws JspException { 532 PageContext pc = createPageContext(); 533 BindException errors = new ServletRequestDataBinder(new TestBean(), "tb").getErrors(); 534 pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", errors); 535 536 NestedPathTag nestedPathTag = new NestedPathTag(); 537 nestedPathTag.setPath("tb"); 538 nestedPathTag.setPageContext(pc); 539 nestedPathTag.doStartTag(); 540 541 BindTag bindTag = new BindTag(); 542 bindTag.setPageContext(pc); 543 bindTag.setPath("name"); 544 545 assertTrue("Correct doStartTag return value", bindTag.doStartTag() == Tag.EVAL_BODY_INCLUDE); 546 BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 547 assertTrue("Has status variable", status != null); 548 assertEquals("tb.name", status.getPath()); 549 assertEquals("Correct field value", "", status.getDisplayValue()); 550 551 BindTag bindTag2 = new BindTag(); 552 bindTag2.setPageContext(pc); 553 bindTag2.setPath("age"); 554 555 assertTrue("Correct doStartTag return value", bindTag2.doStartTag() == Tag.EVAL_BODY_INCLUDE); 556 BindStatus status2 = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 557 assertTrue("Has status variable", status2 != null); 558 assertEquals("tb.age", status2.getPath()); 559 assertEquals("Correct field value", "0", status2.getDisplayValue()); 560 561 bindTag2.doEndTag(); 562 563 BindStatus status3 = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 564 assertSame("Status matches previous status", status, status3); 565 assertEquals("tb.name", status.getPath()); 566 assertEquals("Correct field value", "", status.getDisplayValue()); 567 568 bindTag.doEndTag(); 569 nestedPathTag.doEndTag(); 570 } 571 572 public void testNestedPathWithBindTagWithIgnoreNestedPath() throws JspException { 573 PageContext pc = createPageContext(); 574 BindException errors = new ServletRequestDataBinder(new TestBean(), "tb2").getErrors(); 575 pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb2", errors); 576 577 NestedPathTag tag = new NestedPathTag(); 578 tag.setPath("tb"); 579 tag.setPageContext(pc); 580 tag.doStartTag(); 581 582 BindTag bindTag = new BindTag(); 583 bindTag.setPageContext(pc); 584 bindTag.setIgnoreNestedPath(true); 585 bindTag.setPath("tb2.name"); 586 587 assertTrue("Correct doStartTag return value", bindTag.doStartTag() == Tag.EVAL_BODY_INCLUDE); 588 BindStatus status = (BindStatus) pc.getAttribute(BindTag.STATUS_VARIABLE_NAME); 589 assertTrue("Has status variable", status != null); 590 assertEquals("tb2.name", status.getPath()); 591 } 592 593 public void testTransformTagCorrectBehavior() throws JspException { 594 PageContext pc = createPageContext(); 596 TestBean tb = new TestBean(); 597 DateFormat df = new SimpleDateFormat ("yyyy-MM-dd"); 598 ServletRequestDataBinder binder = new ServletRequestDataBinder(tb, "tb"); 599 CustomDateEditor l = new CustomDateEditor(df, true); 600 binder.registerCustomEditor(Date .class, l); 601 pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", binder.getErrors()); 602 603 BindTag bind = new BindTag(); 605 bind.setPageContext(pc); 606 bind.setPath("tb.date"); 607 bind.doStartTag(); 608 609 TransformTag transform = new TransformTag(); 611 transform.setPageContext(pc); 612 pc.setAttribute("date", tb.getDate()); 613 transform.setParent(bind); 614 transform.setValue("${date}"); 615 transform.setVar("theDate"); 616 transform.doStartTag(); 617 618 assertNotNull(pc.getAttribute("theDate")); 619 assertEquals(pc.getAttribute("theDate"), df.format(tb.getDate())); 620 621 bind = new BindTag(); 623 bind.setPageContext(pc); 624 bind.setPath("tb.name"); 625 bind.doStartTag(); 626 627 transform = new TransformTag(); 628 transform.setPageContext(pc); 629 pc.setAttribute("string", "name"); 630 transform.setValue("${string}"); 631 transform.setParent(bind); 632 transform.setVar("theString"); 633 transform.doStartTag(); 634 635 assertNotNull(pc.getAttribute("theString")); 636 assertEquals(pc.getAttribute("theString"), "name"); 637 } 638 639 public void testTransformTagWithHtmlEscape() throws JspException { 640 PageContext pc = createPageContext(); 642 TestBean tb = new TestBean(); 643 DateFormat df = new SimpleDateFormat ("yyyy-MM-dd"); 644 ServletRequestDataBinder binder = new ServletRequestDataBinder(tb, "tb"); 645 CustomDateEditor l = new CustomDateEditor(df, true); 646 binder.registerCustomEditor(Date .class, l); 647 pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", binder.getErrors()); 648 649 BindTag bind = new BindTag(); 651 bind.setPageContext(pc); 652 bind.setPath("tb.name"); 653 bind.doStartTag(); 654 655 TransformTag transform = new TransformTag(); 656 transform.setPageContext(pc); 657 pc.setAttribute("string", "na<me"); 658 transform.setValue("${string}"); 659 transform.setParent(bind); 660 transform.setVar("theString"); 661 transform.setHtmlEscape("true"); 662 transform.doStartTag(); 663 664 assertNotNull(pc.getAttribute("theString")); 665 assertEquals(pc.getAttribute("theString"), "na<me"); 666 } 667 668 public void testTransformTagOutsideBindTag() throws JspException { 669 PageContext pc = createPageContext(); 671 TestBean tb = new TestBean(); 672 DateFormat df = new SimpleDateFormat ("yyyy-MM-dd"); 673 ServletRequestDataBinder binder = new ServletRequestDataBinder(tb, "tb"); 674 CustomDateEditor l = new CustomDateEditor(df, true); 675 binder.registerCustomEditor(Date .class, l); 676 pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", binder.getErrors()); 677 678 TransformTag transform = new TransformTag(); 680 transform.setPageContext(pc); 681 transform.setVar("var"); 682 transform.setValue("bla"); 683 try { 684 transform.doStartTag(); 685 fail("Tag can be executed outside BindTag"); 686 } 687 catch (JspException e) { 688 } 690 691 MessageTag message = new MessageTag(); 693 message.setPageContext(pc); 694 transform = new TransformTag(); 695 transform.setPageContext(pc); 696 transform.setVar("var"); 697 transform.setValue("bla"); 698 transform.setParent(message); 699 try { 700 transform.doStartTag(); 701 fail("Tag can be executed outside BindTag and inside messagtag"); 702 } 703 catch (JspException e) { 704 } 706 } 707 708 public void testTransformTagNonExistingValue() throws JspException { 709 PageContext pc = createPageContext(); 711 TestBean tb = new TestBean(); 712 DateFormat df = new SimpleDateFormat ("yyyy-MM-dd"); 713 ServletRequestDataBinder binder = new ServletRequestDataBinder(tb, "tb"); 714 CustomDateEditor l = new CustomDateEditor(df, true); 715 binder.registerCustomEditor(Date .class, l); 716 pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", binder.getErrors()); 717 718 BindTag bind = new BindTag(); 720 bind.setPageContext(pc); 721 bind.setPath("tb.name"); 722 bind.doStartTag(); 723 724 TransformTag transform = new TransformTag(); 725 transform.setPageContext(pc); 726 transform.setValue("${string2}"); 727 transform.setParent(bind); 728 transform.setVar("theString2"); 729 transform.doStartTag(); 730 731 assertNull(pc.getAttribute("theString2")); 732 } 733 734 public void testTransformTagWithSettingOfScope() throws JspException { 735 PageContext pc = createPageContext(); 737 TestBean tb = new TestBean(); 738 DateFormat df = new SimpleDateFormat ("yyyy-MM-dd"); 739 ServletRequestDataBinder binder = new ServletRequestDataBinder(tb, "tb"); 740 CustomDateEditor l = new CustomDateEditor(df, true); 741 binder.registerCustomEditor(Date .class, l); 742 pc.getRequest().setAttribute(BindException.ERROR_KEY_PREFIX + "tb", binder.getErrors()); 743 744 BindTag bind = new BindTag(); 746 bind.setPageContext(pc); 747 bind.setPath("tb.date"); 748 bind.doStartTag(); 749 750 TransformTag transform = new TransformTag(); 752 transform.setPageContext(pc); 753 pc.setAttribute("date", tb.getDate()); 754 transform.setParent(bind); 755 transform.setValue("${date}"); 756 transform.setVar("theDate"); 757 transform.setScope("page"); 758 transform.doStartTag(); 759 760 transform.release(); 761 762 assertNotNull(pc.getAttribute("theDate")); 763 assertEquals(pc.getAttribute("theDate"), df.format(tb.getDate())); 764 765 bind = new BindTag(); 767 bind.setPageContext(pc); 768 bind.setPath("tb.name"); 769 bind.doStartTag(); 770 771 transform = new TransformTag(); 772 transform.setPageContext(pc); 773 pc.setAttribute("string", "name"); 774 pc.setAttribute("scopy", "page"); 775 transform.setValue("${string}"); 776 transform.setParent(bind); 777 transform.setVar("theString"); 778 transform.setScope("${scopy}"); 779 transform.doStartTag(); 780 781 transform.release(); 782 783 assertNotNull(pc.getAttribute("theString")); 784 assertEquals(pc.getAttribute("theString"), "name"); 785 } 786 787 } 788 | Popular Tags |