how to resolve this itext v5 pdf format error? - java

Using itext and xmlworker version 5.5.13.2
I have a need to convert static HTML with basic CSS into a pdf. But the resulting PDF has not right format/ spacing/ position. Can someone help me out by pointing the mistake i have done or the something i have missed in the code part.
HTML
<!DOCTYPE html>
<html>
​
<head>
</head>
​
<body>
<div style="margin:5px; width:100%">
<div style="border:1px solid black;padding: 25px;">
<div class="row1">
<div class="floatR" style="min-width: 33%;width: 33%;min-height: 1px; float: right;">
<h3>
Tax Invoice/Bill Of Supply/ Cash Memo
</h3>
(Original for Recipient)
</div>
</div>
<div class="row1 marginT50p">
<div style="min-width: 33%;width: 33%;min-height: 1px;float: left;">
<h4>
Sold By:
ArtisanIndia Shoppping Private Limited,
</h4>
Shop On Plot No. 7 and 8, 41 and 42, Vijay Nagar,
Patrakar Colony Road, Mansarovar,
Jaipur - 302020, Rajasthan
State/UT Code: 08
Country: India
</div>
<div style="min-width: 33%;width: 33%;min-height: 1px;float: left;"></div>
<div style="min-width: 33%;width: 33%;min-height: 1px ;float: left;">
<h4>
Sold By:
ArtisanIndia Shoppping Private Limited,
</h4>
Shop On Plot No. 7 and 8, 41 and 42, Vijay Nagar,
Patrakar Colony Road, Mansarovar,
Jaipur - 302020, Rajasthan
State/UT Code: 08
Country: India
</div>
</div>
<div class="row1 marginT25">
<div style="min-width: 33%;width: 33%;min-height: 1px;float: left;">
<label class="textUnderline">Comapny GSTIN:</label>JKDHFBGKJDJHJ
<br />
<label class="textUnderline">Comapny PAN:</label>SDJKHFGB
</div>
<div style="min-width: 33%;width: 33%;min-height: 1px;float: left;"></div>
<div style="min-width: 33%;width: 33%;min-height: 1px;float: left;">
<label class="textUnderline">Biller GSTIN:</label>JKDHFBGKJDJHJ
<br />
<label class="textUnderline">Biller PAN:</label>SDJKHFGB
</div>
</div>
​
<div class="row1 marginT25">
<div style="min-width: 33%;width: 33%;min-height: 1px;float: left;">
<label class="textBold">Order ID:</label>235235
<br />
<label class="textBold">Order Date:</label>12/12/1912
</div>
<div style="min-width: 33%;width: 33%;min-height: 1px;float: left;"></div>
<div style="min-width: 33%;width: 33%;min-height: 1px;float: left;">
<label class="textBold">Shipping Address:</label>
<br />
<label class="textBold"> </label>
<br />
Shop On Plot No. 7 and 8, 41 and 42, Vijay Nagar,
Patrakar Colony Road, Mansarovar,
Jaipur - 302020, Rajasthan
State/UT Code: 08
Country: India
</div>
</div>
​
<div class="row1 marginT25">
<div style="min-width: 33%;width: 33%;min-height: 1px;float: left;">
​
<label class="textBold">Invoice Date:</label>12/12/1912
<br />
<label class="textBold">Order ID:</label>AI/2012/907656767
​
</div>
<div style="min-width: 33%;width: 33%;min-height: 1px;float: left;"></div>
<div style="min-width: 33%;width: 33%;min-height: 1px;float: left;">
<label class="textBold">Place Of Supply:</label> Maharastra
<br />
<label class="textBold">Place Of Delivery:</label>Maharastra
​
</div>
</div>
​
<div class="row1 marginT25">
<table style="width:100%">
<tr>
<th>Sr. No.</th>
<th>Product</th>
<th>Description</th>
<th>HSN</th>
<th>GST %</th>
<th>QTY</th>
<th>Gross Amount</th>
<th>Discount</th>
<th>Taxable value</th>
<th>CGST</th>
<th>SGST</th>
<th>IGST</th>
<th>Total</th>
</tr>
<tr>
<td>1</td>
<td>Product Description</td>
<td>Item Description</td>
<td>123456</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>2</td>
<td>Product Description</td>
<td>Item Description</td>
<td>123456</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>3</td>
<td>Product Description</td>
<td>Item Description</td>
<td>123456</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
​
<tr>
<td colspan="5">Total</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
​
</div>
<div class="row1">
<div style="min-width: 25%; width: 25%; min-height: 1px;float: left;">
<label class="textUnderline textBold">
Seller Registered Address:
ArtisanIndia Shoppping Private Limited,
</label>
Shop On Plot No. 7 and 8, 41 and 42, Vijay Nagar,
Patrakar Colony Road, Mansarovar,
Jaipur - 302020, Rajasthan
State/UT Code: 08
Country: India
</div>
</div>
​
<div class="row1 marginT50p">
<div style="min-width: 25%; width: 25%; min-height: 1px;float: left;">
E. & O. E.
​
</div>
<div class=" floatR" style="min-width: 25%; width: 25%; min-height: 1px; float: right;">
<div class="signbox">
Sign/Stamp
</div>
<span> Ordered Through
</span>
<span class="textUnderline">
​
ArtisanIndia Shoppping Pvt Limited
​
<br />
Authorized Signature
</span>
</div>
</div>
</div>
</div>
​
</body>
​
</html>
CSS
* {
font-family: sans-serif;
font-size:8px
}
.width33 {
min-width: 33%;
width: 33%;
min-height: 1px;
border:1px solid red
}
.width25 {
min-width: 25%;
width: 25%;
min-height: 1px;
border: 1px solid green;
}
.row1:after {
content: "";
display: table;
clear: both;
}
.floatL {
float: left;
}
.floatR {
float: right;
}
.marginT25 {
margin-top: 25px;
}
.marginT50p {
margin-top: 50px
}
.textUnderline {
text-decoration: underline;
}
.textBold {
font-weight: bold;
}
table,
th,
td {
border: 1px solid black;
border-collapse: collapse;
font-size: 10px;
}
th,
td {
height: 40px;
text-align: center;
}
.signbox {
vertical-align: middle;
text-align: center;
height: 50px;
border: 1px solid black;
/* margin: auto; */
}
Java
UploadUtil s3Upload = new UploadUtil();
PdfWriter pdfWriter = null;
ByteArrayOutputStream gg = new ByteArrayOutputStream();
try{
Document document = new Document();
PdfWriter.getInstance(document, gg);
document.open();
XMLWorkerHelper xmlWorkerHelper = XMLWorkerHelper.getInstance();
xmlWorkerHelper.parseXHtml(pdfWriter, document, new FileInputStream("C:\\Users\\jj\\Desktop\\asdf\\tt.html"), new FileInputStream("C:\\Users\\jj\\Desktop\\asdf\\ttt.css"));
document.close();
FileOutputStream fos = new FileOutputStream("C:\\Users\\jj\\Desktop\\asdf\\test.pdf");
fos.write(gg.toByteArray());
fos.close();
}
catch(Exception e){
System.out.println("asdf");
}
the resulting pdf generated looks something like this.
instead of
Can someone out here point out the reason why this is happening or what I have missed or done wrong?

iText 5.5.13.2 is the old version of iText product and it's not supported anymore. Most likely there are some not supported functionality in the html or css. I can guess that float properties are not supported. Probably there are issues with percentage width. You can try to play around with your html and css files to try to make pdf look acceptable, but the easiest way is to use the newest version of iText product which is iText 7

Related

Spring Application: Problem Parsing Form Object To Controller Using #Model attribute. Error org.attoparser.ParseException:Field

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" type="text/css" media="all" th:href="#{/css/bootstrap.min.css}">
<title>Home</title>
</head>
<body class="p-3 mb-2 bg-light text-black">
<div class="container">
<div id="logoutDiv">
<h1 th:text="${'Welcome ' + name}">Name</h1>
<form action="#" th:action="#{/logout}"method="POST">
<button type="submit" class="btn btn-secondary float-right">Logout</button>
</form>
</div>
<div id="contentDiv" style="clear: right;">
<nav style="clear: right;">
<div class="nav nav-tabs" id="nav-tab" role="tablist">
<a class="nav-item nav-link active" id="nav-files-tab" data-toggle="tab" href="#nav-files" role="tab" aria-controls="nav-files" aria-selected="true">Files</a>
<a class="nav-item nav-link" id="nav-notes-tab" data-toggle="tab" href="#nav-notes" role="tab" aria-controls="nav-notes" aria-selected="false">Notes</a>
<a class="nav-item nav-link" id="nav-credentials-tab" data-toggle="tab" href="#nav-credentials" role="tab" aria-controls="nav-credentials" aria-selected="false">Credentials</a>
</div>
</nav>Upload<
<div class="tab-content" id="nav-tabContent">
<div class="tab-pane fade show active" id="nav-files" role="tabpanel" aria-labelledby="nav-files-tab">
<p th:text="${message}" th:if="${message ne null}" class="alert alert-primary"></p>
<form action="#" enctype="multipart/form-data" th:action="#{'/file/uploadFile'}" th:method="POST" >
<div class="container">
<div class="row" style="margin: 1em;">
<div class="col-sm-2">
<label for="fileUpload">Upload a New File:</label>
</div>
<div class="col-sm-6">
<input type="file" class="form-control-file" id="fileUpload" name="fileUpload">
</div>
<div class="col-sm-4">
<button type="submit" class="btn btn-dark">/button>
</div>
</div>
</div>
</form>
<div class="table-responsive">
<table class="table table-striped" id="fileTable">
<thead>
<tr>
<th style="width: 20%" scope="col"></th>
<th style="width: 80%" scope="col">File Name</th>
</tr>
</thead>
<tbody>
<tr th:each="file : ${files}">
<td>
<a target="_blank" class="btn btn-success" th:href="#{/file/{filename}(fileName = ${file.filename})}">View</a>
<a class="btn btn-danger" th:href="#{/file/delete{filename}(filename = ${file.filename})}" >Delete</a>
</td>
<th scope="row" th:text="${file.filename}" ></th>
</tr>
</tbody>
</table>
</div>
</div>
<div class="tab-pane fade" id="nav-notes" role="tabpanel" aria-labelledby="nav-notes-tab">
<button style="margin: 0.25em;" type="button" class="btn btn-info float-right" onclick="showNoteModal()">
+ Add a New Note
</button>
<div class="table-responsive">
<table class="table table-striped" id="userTable">
<thead>
<tr>
<th style="width: 20%" scope="col"></th>
<th style="width: 20%" scope="col">Title</th>
<th style="width: 60%" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr th:each="note : ${notes}">
<td>
<button id="edit-note" type="button" class="btn btn-success"
th:attr="data-id=${note.getNoteId},
data-title=${note.getNoteTitle},
data-description=${note.getNoteDescription}"
onclick="showNoteModal (this.getAttribute('data-id'),this.getAttribute('data-title'),this.getAttribute('data-description'))">Edit/View</button>
<a id="delete-note" class="btn btn-danger" th:href="#{/note/delete/{noteId}(noteId = ${note.getNoteId()})}">Delete</a>
</td>
<th id="notetitle" scope="row" th:text="${note.getNoteTitle()}">Example Title</th>
<td id="notedescription" th:text="${note.getNoteDescription()}">Example Description </td>
</tr>
</tbody>
</table>
</div>
<div class="modal fade" id="noteModal" tabindex="-1" role="dialog" aria-labelledby="noteModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="noteModalLabel">Note</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
-Here is the error that I get-
<form action="#" method="POST" th:action="#{/note/add}" th:object="${Notes}">
<input type="hidden" name="noteId" id="note-id">
<div class="form-group">
<label for="note-title" class="col-form-label">Title</label>
<input type="text" name= "noteTitle" class="form-control" id="note-title" maxlength="20" required th:field="*{noteTitle}">
</div>
<div class="form-group">
<label for="note-description" class="col-form-label">Description</label>
<textarea class="form-control" name="noteDescription" id="note-description" rows="5" maxlength="1000" required th:field="*{noteDescription}"></textarea>
</div>
<button id="noteSubmit" type="submit" class="d-none"></button>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary" onclick="$('#noteSubmit').click();">Save changes</button>
</div>
</div>
</div>
</div>
</div>
<div class="tab-pane fade" id="nav-credentials" role="tabpanel" aria-labelledby="nav-credentials-tab">
<button style="margin: 0.25em;" type="button" class="btn btn-info float-right" onclick="showCredentialModal()">
+ Add a New Credential
</button>
<div class="table-responsive">
<table class="table table-striped" th:object="${credentials}" id="credentialTable">
<thead>
<tr>
<th style="width: 20%" scope="col"></th>
<th style="width: 35%" scope="col">URL</th>
<th style="width: 20%" scope="col">Username</th>
<th style="width: 25%" scope="col">Password</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<button type="button" class="btn btn-success">Edit</button>
<a class="btn btn-danger">Delete</a>
</td>
<th scope="row">Example Credential URL</th>
<td>Example Credential Username</td>
<td>Example Credential Password</td>
</tr>
</tbody>
</table>
</div>
<div class="modal fade" id="credentialModal" tabindex="-1" role="dialog" aria-labelledby="credentialModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="credentialModalLabel">Credential</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<form action="#" method="POST">
<input type="hidden" name="credentialId" id="credential-id">
<div class="form-group">
<label for="note-title" class="col-form-label">URL</label>
<input type="text" name= "url" class="form-control" id="credential-url" maxlength="100" required>
</div>
<div class="form-group">
<label for="note-title" class="col-form-label">Username</label>
<input type="text" name= "username" class="form-control" id="credential-username" maxlength="30" required>
</div>
<div class="form-group">
<label for="note-title" class="col-form-label">Password</label>
<input type="text" name= "password" class="form-control" id="credential-password" maxlength="30" required>
</div>
<button id="credentialSubmit" type="submit" class="d-none"></button>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary" onclick="$('#credentialSubmit').click();">Save changes</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script th:src="#{/js/jquery-slim.min.js}"></script>
<script th:src="#{/js/popper.min.js}"></script>
<script th:src="#{/js/bootstrap.min.js}"></script>
<!--For opening the note modal-->
<script type="text/javascript">
// For opening the note modal
function showNoteModal(noteId, noteTitle, noteDescription) {
$('#note-id').val(noteId ? noteId : '');
$('#note-title').val(noteTitle ? noteTitle : '');
$('#note-description').val(noteDescription ? noteDescription : '');
$('#noteModal').modal('show');
}
// For opening the credentials modal
function showCredentialModal(credentialId, url, username, password) {
$('#credential-id').val(credentialId ? credentialId : '');
$('#credential-url').val(url ? url : '');
$('#credential-username').val(username ? username : '');
$('#credential-password').val(password ? password : '');
$('#credentialModal').modal('show');
}
</script>
</body>
</html>
-I get an error when trying to parse the Note Form into my Note Controller. I try to parse my model object Notes in the form in my HTML home form into the Controller but it can not except the fields from the form. My first error is this:
Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Error during execution of processor 'org.thymeleaf.spring5.processor.SpringInputGeneralFieldTagProcessor' (template: "home" - line 109, col 148), Line 109 is the fields from the form
I also get a second error: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'Notes' available as request attribute-
--- Note Controller ---
#Controller
#RequestMapping("note")
public class NoteController {
private NoteService noteServices;
private UserService userService;
public NoteController(NoteService noteServices, UserService userService) {
this.noteServices = noteServices;
this.userService = userService;
}
// Add an new note
#PostMapping("add")
public String addNote(#ModelAttribute(value="Notes")Notes Notes, Authentication authentication, Model model) throws IOException {
String userName = authentication.getName();
User user = userService.getUser(userName);
Integer userid = user.getId();
if(Notes.getNoteId() == null){
noteServices.addNote(Notes,userid);
}else{
noteServices.editNote(Notes);
}
return "result";
}
#GetMapping("/delete/{noteId:.+}")
public String deleteNote(#PathVariable Integer noteId, Authentication authentication, RedirectAttributes redirectAttributes){
noteServices.deleteNote(noteId);
redirectAttributes.addFlashAttribute("deleteNoteSuccess","Note deleted successfully.");
return "redirect:/result";
}
private Integer getUserId(Authentication authentication) {
String userName = authentication.getName();
User user = userService.getUser(userName);
return user.getId();
}
}
---
--- POJO Model ---
public class Notes {
private Integer noteId;
private String noteTitle;
private String noteDescription;
private Integer userId;
public Notes(String noteTitle, String noteDescription, Integer userId) {
this.noteTitle = noteTitle;
this.noteDescription = noteDescription;
this.userId = userId;
}
public Integer getNoteId() {
return noteId;
}
public void setNoteId(Integer noteId) {
this.noteId = noteId;
}
public String getNoteTitle() {
return noteTitle;
}
public void setNoteTitle(String noteTitle) {
this.noteTitle = noteTitle;
}
public String getNoteDescription() {
return noteDescription;
}
public void setNoteDescription(String noteDescription) {
this.noteDescription = noteDescription;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
}

Spring MVC: Multiple Row Form Submit

I had a requirement where using Spring MVC we had to take inputs multiple rows of data from user. The form had many rows which user can edit and submit My code look like this.When I tried to display the area list it is null What will be the reason
My view is
<form data-th-action="#{/qprmonitorlottery}" method="POST" >
<section>
<div class="panel panel-default" style="margin-top: 15px;">
<!-- Default panel contents -->
<div class="panel-heading">エリア間補完の有無</div>
<div class="panel-body">
<div class="table-responsive">
<table class="table table-bordered">
<tr>
<th width="13%" style="background: #FFFFFF; border-top: 1px solid #ffffff; border-left: 1px solid #ffffff;" > </th>
<th colspan="3" style="text-align: center">都市規模</th>
</tr>
<tr>
<th>エリア </th>
<th width="28%">大都市 </th>
<th width="29%">中都市</th>
<th width="30%">郊外 </th>
</tr>
<tr data-th-each="qprLottery,stat : ${qprLottery}">
<td data-th-text = "${qprLottery.areaName}">北海道 </td>
<td> <span style="display: inline-block; width: 80%">
<input type="number" data-th-value = "${qprLottery.rate1}" class="form-control" data-th-name="firstRate +${stat.index}" required >
<span class="help-block with-errors"></span>
</span> <span style="position: relative; top:-10px;" >%</span> </td>
<td> <span style="display: inline-block; width: 80%">
<input type="number" data-th-value = "${qprLottery.rate2}" class="form-control" data-th-name="secondRate +${stat.index}" required >
</span> <span style="position: relative; top:-10px;" >%</span> </td>
<td> <span style="display: inline-block; width: 80%">
<input type="number" data-th-value = "${qprLottery.rate3}" class="form-control" data-th-name="thirdRate +${stat.index}" required >
</span> <span style="position: relative; top:-10px;" >%</span> </td>
</tr>
</table>
</div>
</div>
</div>
</section>
<div class="row">
<div align="center" style="padding: 30 0px;">
<button type="submit" class="btn btn-primary" value="実行">実行
</button>
</div>
</div>
</form>
Controller is
#RequestMapping(value = "/qprmonitorlottery", method = RequestMethod.POST)
public String setQprMonitorLottery(#Valid #ModelAttribute() MasterCitySizeAreaForm form, BindingResult result) {
CitySizeByAreaView a = new CitySizeByAreaView();
System.out.println("Area list" + a.getRate1());
System.out.println("Area list-------------" + form.getAreaList());
if (result.hasErrors()) {
return "new-monitor-lottery";
}
return "new-monitor-lottery";
}
form classes are
public class MasterCitySizeAreaForm {
private ArrayList<CitySizeAreaForm> areaList;
public ArrayList<CitySizeAreaForm> getAreaList() {
return areaList;
}
public void setAreaList(ArrayList<CitySizeAreaForm> areaList) {
this.areaList = areaList;
}
}
form class 2
public class CitySizeAreaForm {
private int areaId;
private Integer area;
private Integer citySize;
private String areaName;
private String citySizeName;
private Float rate1;
private Float rate2;
private Float rate3;
public CitySizeAreaForm() {
}
public CitySizeAreaForm(Integer area, String areaName, Float rate1, Float rate2, Float rate3) {
this.area = area;
this.areaName = areaName;
this.rate1 = rate1;
this.rate2 = rate2;
this.rate3 = rate3;
}
}
replace:
<tr data-th-each="qprLottery,stat : ${qprLottery}">
with
<tr data-th-each="qprLottery,stat : ${qprLottery.areaList}">
This link helped me!!!Do try it!!
http://jsltech.blogspot.com/2013/12/how-add-multiple-objects-into-database.html
can use this format for displaying:-
<c:forEach items="${contactForm.contacts}" var="contact" varStatus="status">
<tr>
<td>${contact.firstname}</td>
<td>${contact.lastname}</td>
<td>${contact.email}</td>
<td>${contact.phone}</td>
</tr>
</c:forEach>

Handling ui-dialog in Selenium Webdriver using Java

In our application, once after providing the details of creating an order clicks Save, a dialog gets open and wants user’s re-confirmation whether the order needs to place or not.
Now the difficulty comes in identifying and submitting confirmation on this newly opened dialog – where unable to switch into this new dialog.
Set<String> window = wd.getWindowHandles();
Iterator<String> it = window.iterator();
String parentwindow = it.next();
String childwindow = it.next();
wd.switchTo().window(childwindow);
ccg.clickconfirmSalesEntitySave();
wd.switchTo().window(parentwindow);
Not for certain, whether the window method works for dialog too..
Can someone help me on this concern, please.
Below is the HTML of this dialog.
<div class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable" style="display: block; z-index: 1002; outline: 0px none; height: auto; width: 300px; top: 37px; left: 514px;" tabindex="-1" role="dialog" aria-labelledby="ui-dialog-title-dialog-confirm">
<div class="ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix" unselectable="on" style="-moz-user-select: none;">
<span id="ui-dialog-title-dialog-confirm" class="ui-dialog-title" unselectable="on" style="-moz-user-select: none;">Create an order</span>
<a class="ui-dialog-titlebar-close ui-corner-all" href="#" role="button" unselectable="on" style="-moz-user-select: none;">
<span class="ui-icon ui-icon-closethick" unselectable="on" style="-moz-user-select: none;">close</span>
</a>
</div>
<div id="dialog-confirm" class="popup ui-dialog-content ui-widget-content" style="width: auto; min-height: 0px; height: 155px;">
<br/>
<table>
<tbody>
<tr>
<td class="dialogContent">Please confirm your request</td>
</tr>
</tbody>
</table>
<br/>
<br/>
<div style="border:0.1px solid #DCDCDC;"/>
<br/>
<form id="xyzGroupVO" method="post" action="/xyz/xyz/Maintenance?execution=e2s2">
<div align="center">
<input id="confirmOrderSave" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" type="submit" value="Yes" name="_eventId_xyzGroupSave"/>
<input id="confirmOrderDontSave" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" type="submit" value="No" name="_eventId_xyzGroupDontSave"/>
</div>
</form>
</div>
</div>
In your code,you can get child window through first it.next(). Try following:
String parentWindowHandle = browser.getWindowHandle(); // save the current window handle.
Iterator<String> windowIterator = browser.getWindowHandles();
while(windowIterator.hasNext())
{
String windowHandle = windowIterator.next();
browser.switchTo().window(windowHandle);
}

How to validate jsp page using HTMl5

I have two submit button in one form,if I click on first submit button(i.e cashPaymentDiv save butoon) both submit buttons fields are validating. I want to validate only one div while submitting form.
<form name="customerForm" action="saveTransactionBill.do">
<div id="paymentModeDiv">
<table>
<tr>
<td><label
style="margin: 0; width: 100px; display: block; padding: 5px 0; color: #737373; font: bold 12px Arial, Helvetica, sans-serif; float: left;">Payment
Mode:</label></td>
<td><select onchange="showPaymentDivs();"
name="paymentMode">
<option value="">--Select--</option>
<option value="cash">Cash</option>
<option value="cheque">Cheque</option>
</select></td>
</tr>
</table>
</div>
<div id="cashPaymentDiv" class="required">
<table>
<tr>
<td><label>Amount Paid:</label></td>
<td><input name="amountPaid" id="cashPaymentForBillWise" onchange="calculateBalAmount();"
required x-moz-errormessage="Enter Username" pattern="[0-9]{0,20}"
title="Please enter only numrics." ></td>
</tr>
<tr>
<td><input type="submit" value="cash Save"></td>
</tr>
</table>
</div>
<div id="chequePaymentDiv" class="required">
<table>
<tr>
<td><label>Amount Paid:</label></td>
<td><input name="amountPaid" id="cashPaymentForBillWise" onchange="calculateBalAmount();"
required x-moz-errormessage="Enter Username" pattern="[0-9]{0,20}"
title="Please enter only numrics." ></td>
</tr>
<tr>
<td><input type="submit" value="cheque Save"></td>
</tr>
</table>
</div>
</form>

how to reload jsp page on every request?

i have a jsp page with jdbc connection and on first load it shows the data accurately but after that it shows empty tables i think 2nd time it loads from memory not from server
what is problem behind i don't know
ok here are the details
i have a servlet that maintains the session for a user that log in and then after creating the session the servlet redirect the user to a view page that is a jsp page and displays the existing records in DB
when the servlet redirects the page the jsp can show the records in but when i access this page from any other html page it is unable to display the records here is the code for jsp page to view.
<%# page import="java.sql.ResultSet" %>
<%# page import="java.math.BigDecimal" %>
<%# page import="java.sql.SQLException" %>
<%# page import="java.util.logging.Level" %>
<%# page import="java.util.logging.Logger" %>
<%# page import="iEHR.cDBProcessor" %>
<HTML>
<HEAD>
<TITLE>View Patient</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
<script type="text/javascript" language="javascript" src="datepicker/main.js"></script>
<script type="text/javascript" language="javascript" src="datepicker/prototype-1.js"></script>
<script type="text/javascript" language="javascript" src="datepicker/prototype-base-extensions.js"></script>
<script type="text/javascript" language="javascript" src="datepicker/prototype-date-extensions.js"></script>
<script type="text/javascript" language="javascript" src="datepicker/behaviour.js"></script>
<script type="text/javascript" language="javascript" src="datepicker/ratingbar.js"></script>
<script type="text/javascript" language="javascript" src="datepicker/datepicker.js"></script>
<link rel="stylesheet" href="datepicker/datepicker.css">
<script type="text/javascript" language="javascript" src="datepicker/behaviors.js"></script>
<style type="text/css">
<!--
img {
border: none;
}
.tah10 {
font-family: "Times New Roman", Times, serif;
font-size: 14px;
text-decoration: none;
color: #000000;
font-style: italic;
}
.tah11 {
font-family: Tahoma;
font-size: 11px;
text-decoration: none;
color: #000000;
}
.ver10 {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
text-decoration: none;
color: #000000;
}
.ver11 {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
text-decoration: none;
color: #000000;
}
.tah9 {
font-family: Tahoma;
font-size: 9px;
text-decoration: none;
color: #000000;
}
.ver9 {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 9px;
text-decoration: none;
color: #000000;
}
td {
vertical-align: top;
color: 497B99;
font-size: 12px;
font-style: normal;
font-weight: bolder;
}
-->
</style>
<style type="text/css">
<!--
.bgtop {
background-repeat: repeat-x;
background-position: top;
}
-->
</style>
<style type="text/css">
<!--
a {
font-family: Times New Roman, Times, serif;
font-size: 12px;
font-weight: bolder;
color: 467B99;
text-decoration: none;
}
.datepicker{
font-family: Times New Roman, Times, serif;
font-size: 12px;
font-weight: bolder;
color: 467B99;
text-decoration: none;
}
a:hover {
font-size: 10px;
font-weight: bold;
color: FF8400;
}
.style1 {
color: 467B99;
font-family: Times New Roman, Times, serif;
font-size: 12px;
text-decoration: none;
font-style: normal;
font-weight: bolder;
}
.style2 {
font-family: Times New Roman, Times, serif;
font-size: 12px;
font-style: normal;
font-weight: bolder;
color: 467B99;
text-decoration: none;
}
-->
</style>
</HEAD>
<BODY BGCOLOR=#FFFFFF LEFTMARGIN=0 TOPMARGIN=0 MARGINWIDTH=0 MARGINHEIGHT=0>
<!-- ImageReady Slices (0005_red.psd - Slices: 03, 04, 05) -->
<TABLE WIDTH=100% height="100%" BORDER=0 CELLPADDING=0 CELLSPACING=0 bgcolor="#FFFFFF">
<TR>
<TD width="12%">
<TABLE WIDTH=159 BORDER=0 CELLPADDING=0 CELLSPACING=0>
<TR>
<TD COLSPAN=6>
<IMG SRC="images/logo.gif" WIDTH=159 HEIGHT=128 ALT=""></TD>
</TR>
<TR>
<TD>
<IMG SRC="images/s1.gif" WIDTH=20 HEIGHT=20 ALT=""></TD>
<TD>
<A HREF="#">
<IMG SRC="images/r1.gif" WIDTH=29 HEIGHT=20 BORDER=0 ALT=""></A></TD>
<TD>
<A HREF="#">
<IMG SRC="images/r2.gif" WIDTH=31 HEIGHT=20 BORDER=0 ALT=""></A></TD>
<TD>
<A HREF="#">
<IMG SRC="images/r3.gif" WIDTH=31 HEIGHT=20 BORDER=0 ALT=""></A></TD>
<TD>
<A HREF="#">
<IMG SRC="images/r4.gif" WIDTH=28 HEIGHT=20 BORDER=0 ALT=""></A></TD>
<TD>
<IMG SRC="images/s2.gif" WIDTH=20 HEIGHT=20 ALT=""></TD>
</TR>
<TR>
<TD COLSPAN=6>
<IMG SRC="images/s3.gif" WIDTH=159 HEIGHT=93 ALT=""></TD>
</TR>
<TR>
<TD COLSPAN=6>
<IMG SRC="images/h1.jpg" WIDTH=159 HEIGHT=32 ALT=""></TD>
</TR>
<TR>
<TD COLSPAN=6>
<IMG SRC="images/img1.jpg" WIDTH=159 HEIGHT=76 ALT=""></TD>
</TR>
<TR>
<TD COLSPAN=6>
<IMG SRC="images/img2.jpg" WIDTH=159 HEIGHT=81 ALT=""></TD>
</TR>
<TR>
<TD COLSPAN=6>
<IMG SRC="images/img3.jpg" WIDTH=159 HEIGHT=79 ALT=""></TD>
</TR>
<TR>
<TD COLSPAN=6> <IMG SRC="images/but1.jpg" ALT="" WIDTH=159 HEIGHT=42 border="0" usemap="#Map"></TD>
</TR>
</TABLE> </TD>
<TD width="12%">
<TABLE WIDTH=167 BORDER=0 CELLPADDING=0 CELLSPACING=0>
<TR>
<TD COLSPAN=2>
<IMG SRC="images/h2.jpg" WIDTH=167 HEIGHT=25 ALT=""></TD>
</TR>
<TR>
<TD COLSPAN=2 background="images/bg1.gif" HEIGHT=94>
<div style="padding:20;padding-top:5;padding-right:10;padding-bottom:0;color:ffffff" class="tah10">
<strong>Noesis</strong><br><br>
<strong>Inovative EHR Services </strong> <br>
<br>
</div> </TD>
</TR>
<TR>
<TD COLSPAN=2>
<IMG SRC="images/s4.jpg" WIDTH=167 HEIGHT=52 ALT=""></TD>
</TR>
<TR>
<TD COLSPAN=2 background="images/bg2.gif">
<div style="padding-left:0px;padding-top:12px;padding-bottom:2"><span style="padding-left:20;padding-top:5">Add Patient </span></div> </TD>
</TR>
<TR>
<TD COLSPAN=2 background="images/bg3.gif" HEIGHT=18>
<div style="padding-left:20;padding-top:5">Add Patient History </div>
</TR>
<TR>
<TD COLSPAN=2 background="images/bg4.gif" HEIGHT=18>
<div style="padding-left:20;padding-top:5">Add Patient Insurance</div> </TD>
</TR>
<TR>
<TD COLSPAN=2 background="images/bg5.gif" HEIGHT=18 >
<div style="padding-left:20;padding-top:5">View Patient Records</div></TD>
</TR>
<TR>
<TD COLSPAN=2 background="images/bg6.gif" HEIGHT=18 >
<div style="padding-left:20;padding-top:5">About Us</div> </TD>
</TR>
<TR>
<TD COLSPAN=2 background="images/bg7.gif" HEIGHT=18 >
<div style="padding-left:20;padding-top:5">Contact Us</div> </TD>
</TR>
<TR>
<TD COLSPAN=2 background="images/bg8.gif" HEIGHT=18 >
<div style="padding-left:20;padding-top:5"></div> </TD>
</TR>
<TR>
<TD COLSPAN=2>
<IMG SRC="images/h3.gif" WIDTH=167 HEIGHT=65 ALT=""></TD>
</TR>
<TR>
<TD COLSPAN=2 background="images/bg9.gif" HEIGHT=94>
<div style="padding:15;padding-top:3;padding-bottom:3;color:737373" class="tah10"></div> </TD>
</TR>
<TR>
<TD COLSPAN=2>
<IMG SRC="images/h4.jpg" WIDTH=167 HEIGHT=41 ALT=""></TD>
</TR>
<TR>
<TD background="images/bg10.jpg" WIDTH=123 HEIGHT=32>
<div style="padding-left:15;padding-top:1">
<input name="text" type="text" size="11">
</div></TD>
<TD width="44"> <IMG SRC="images/but2.jpg" ALT="" WIDTH=44 HEIGHT=32 border="0" usemap="#Map2"></TD>
</TR>
<TR>
<TD COLSPAN=2>
<IMG SRC="images/s5.jpg" WIDTH=167 HEIGHT=48 ALT=""></TD>
</TR>
<TR>
<TD COLSPAN=2> </TD>
</TR>
</TABLE> </TD>
<TD width="72%">
<table width=100% height="193" border=0 cellpadding=0 cellspacing=0>
<tr>
<td height=172 colspan="4" ><span class="bgtop"><img src="images/f_m.jpg"></span></td>
<td height=172 colspan="2" width="63%" background="images/bg_tile_1.gif" class="bgtop"> </td>
</tr>
<tr>
<td height=19 colspan="4" background="images/bg11.gif" > </td>
</tr>
</table>
<%! private ResultSet rsResult; %>
<%! cDBProcessor DBProcess = new cDBProcessor(); %>
<%
DBProcess.ConnectTODB();
if(request.getAttribute("dbrec") != null)
{
rsResult = DBProcess.statement.executeQuery("SELECT * FROM patients");
}//end if
out.println("<table border=\"0\"><tr><td valign=\"top\" >");
out.println("<tr><th>Patient ID</th><th>First Name</th><th>Middle Name</th><th>Last Name</th><th>Gender</th><th>Marital Status</th><th>Phone No.</th><th>Address</th>");
out.println("<th>Date Of Birth</th><th>Last Date Of Exam</th><th>Status</th></tr>");
//data display on page
if(rsResult!= null)
{
try
{
while (rsResult.next())
{
BigDecimal bdPatientID = rsResult.getBigDecimal("patient_id");
String strFirstname = rsResult.getString("first_name");
String strLastname = rsResult.getString("last_name");
String strMiddlename = rsResult.getString("middle_name");
String strGeneder = rsResult.getString("gender");
String strMeritalStatus = rsResult.getString("marital_status");
BigDecimal bdPhoneNo = rsResult.getBigDecimal("phone_no");
String strAddress = rsResult.getString("address");
String strDOB = rsResult.getDate("birth_dt") == null ? "" : rsResult.getDate("birth_dt").toString();
String strDOE = rsResult.getDate("dt_of_exam") == null ? "" :rsResult.getDate("dt_of_exam").toString();
String strStatus;
Byte bPatientStatus= rsResult.getByte("status");
if(bPatientStatus == 1)
{
strStatus = "Active";
}//end if
else
{
strStatus = "Inactive";
}//end else
out.println("<tr><td>"+bdPatientID+"</td><td>"+strFirstname+"</td><td>"+strMiddlename+"</td><td>"+strLastname+"</td>");
out.println("<td>"+strGeneder+"</td><td>"+strMeritalStatus+"</td><td>"+bdPhoneNo+"</td><td>"+strAddress+"</td>");
out.println("<td>"+strDOB+"</td><td>"+strDOE+"</td><td>"+strStatus+"</td></tr>");
}//end while
out.println("</table>");
}//end try
catch (SQLException ex)
{
out.println("<I>exception</I><br>");
}//end catch
}//end if
DBProcess.CloseDB();
%>
</TD>
<TD width="4%" background="images/bg_tile_1.gif" class="bgtop"> </TD>
</TR>
<TR>
<TD height="100%" colspan="4"> </TD>
</TR>
<TR>
<TD colspan="3">
<TABLE WIDTH=768 BORDER=0 CELLPADDING=0 CELLSPACING=0>
<TR>
<TD width="326">
<IMG SRC="images/s7.gif" WIDTH=326 HEIGHT=48 ALT=""></TD>
<TD background="images/bg16.gif" WIDTH=442 HEIGHT=48>
<div style="padding-top:12;color:A8A8A8" class="tah11">
2010 © Copyright iAS. <Br>
All rights Reserved. Read Privacy Policy.</div> </TD>
</TR>
</TABLE> </TD>
<TD width="4%" background="images/bg_tile_2.gif"> </TD>
</TR>
</TABLE>
<!-- End ImageReady Slices -->
<map name="Map">
<area shape="rect" coords="39,2,133,27" href="#">
</map>
<map name="Map2">
<area shape="circle" coords="9,12,9" href="#">
</map>
</BODY>
</HTML>
It smells like threadsafety/scoping problem. You've declared the ResultSet and DBProcess as instance variable of the JSP using <%! %> scriptlet declarations, so it's been shared among all HTTP requests. I am not sure about the DBProcess, but this is certainly a bad idea for ResultSet (and also for Connection and Statement by the way). How the DBProcess is been used in the remnant of the code is also pretty scary, e.g. DBProcess.statement.executeQuery(). Is the Statement really a public field? I don't know how the class' internals look like, but yes, this smells too much like threadsafety/scoping problem.
Also, this 90's style writing of HTML and using scriptlets in JSP really don't suit a "Copyright 2010" application. Are you reading the right tutorials/books?
beside those issues pointed out by BalusC,
base on the described symptom "when the servlet redirects the page the jsp can show the records in but when i access this page from any other html page it is unable to display the records" and code "if(request.getAttribute("dbrec") != null) ".
My prime suspect for the issue's cause is the use of request.getAttribute("dbrec")
for those direct access from other html page, this value likely to be null. I suspect for redirect case, there may be some code that perform request.setAttribute("dbrec",....)

Categories

Resources