You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Before your post : If you are not 100% sure that you've found an issue,
please post on the SmartGWT forums first. Upon confirmation you'll be
advised to create an issue.
I am a 100% sure, I have posted this on the forum (http://forums.smartclient.com/showthread.php?t=32346&highlight=fanie1980) and received no assistance.
All issues require a minimal standalone test case with
an onModuleLoad() to be attached. You can modify an existing showcase
example if desired. Issues created without a standalone test case are
subject to being rejected after 7 days if no test case is present.
[CODE]
import com.smartgwt.client.data.AdvancedCriteria;
import com.smartgwt.client.data.Criterion;
import com.smartgwt.client.data.DSRequest;
import com.smartgwt.client.data.DSResponse;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.RequestTransformer;
import com.smartgwt.client.data.ResponseTransformer;
import com.smartgwt.client.types.OperatorId;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.ButtonItem;
import com.smartgwt.client.widgets.form.fields.TextAreaItem;
import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
import com.smartgwt.client.widgets.form.validator.LengthRangeValidator;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.layout.VLayout;
public class DataSourceValidation implements EntryPoint {
public void onModuleLoad() {
Validation validation = new Validation();
}
class Validation extends VLayout {
private DataSource ds;
private DynamicForm form = new DynamicForm();
public Validation(){
super();
setWidth100();
setHeight100();
setPadding(50);
setBackgroundColor("#f5f5f5");
setMembersMargin(20);
}
@Override
protected void onInit(){
createDataSource();
createGrid();
createForm();
}
private void createForm(){
TextAreaItem crud = new TextAreaItem("Memo", "Memo");
ButtonItem save = new ButtonItem("Save", "Save");
save.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
form.validate();
if (!form.hasErrors())
form.saveData();
}
});
form.setDataSource(ds);
form.setBackgroundColor("#FFFFFF");
form.setFields(crud, save);
addMember(form);
}
private void createGrid(){
ListGridTextAreaField Memo = new ListGridTextAreaField("Memo", "Memo", 3000);
ListGrid grid = new ListGrid();
grid.setCanEdit(true);
grid.setDataSource(ds);
grid.setAutoFetchData(true);
grid.setFields(Memo);
grid.setCriteria(new AdvancedCriteria(OperatorId.AND, new Criterion[] { new Criterion("IDMEMO", OperatorId.EQUALS, 46) }));
grid.setWrapCells(true);
grid.setFixedRecordHeights(false);
addMember(grid);
}
private void createDataSource(){
ds = DataSource.get("Memo", new RequestTransformer() {
@Override
protected Object transformRequest(DSRequest dsRequest) {
return dsRequest.getData();
}
}, new ResponseTransformer() {
@Override
protected void transformResponse(DSResponse response, DSRequest request,Object data) {
if ((response.getData() != null) && (response.getData().length > 0))
form.editRecord(response.getData()[0]);
}
});
}
class ListGridTextAreaField extends ListGridField {
/**
*
* @param name
* @param title
* @param length - Specifies the maximum number of characters allowed in the text area item
*/
public ListGridTextAreaField(String name, String title, int length) {
super(name, title);
setWidth("*");
LengthRangeValidator validator = new LengthRangeValidator(); // Created this validator to try and explicitly set the validation rules, only works for a while (than a new validation rule of max length 60 overrides all other rules)
validator.setMax(length);
TextAreaItem crud = new TextAreaItem(name, title);
//crud.setValidators(validator); // Only works for a while (than a new validation rule of max length 60 overrides all other rules)
crud.setEnforceLength(true);
setEditorProperties(crud);
//setValidators(validator); // Only works for a while (than a new validation rule of max length 60 overrides all other rules)
}
}
}
}
[/CODE]
Please test any issue against the latest available code (from
smartclient.com/builds) before filing, and indicate any release versions
that you know are also affected.
What steps will reproduce the problem?
1. I deploy to two tomcat instances (Apache Load Balancing). At first it works
perfectly but after a few days all datasource text validation fails
(ListGridField, TextItem, RichTextItem, TextAreaItem). I can redeploy my
application with no code changes, it works perfectly again for a few days. I
can recreate it this way every time.
2. I cannot create it on my development environment, so it makes it very hard
to find the problem locally
What is the expected output? What do you see instead?
Text validation is expected to use the datasource to enforce length validation
on types of "text", it does in the beggining but after two or three days it
enforces it's own length validation rules.
The datasource defines the length as 1000, after a few days the validation rule
on the same item is overridden to a different value. When validation is them
checked I get the following error:
FireFox:
Must be no more than 60 characters
Chrome:
Must be no more than 60 characters
Must be no more than 1000 characters
My datasource loader loads:
if (window.isc == undefined || window.isc.DataSource == undefined){
alert("Can't load DataSources - SmartClient runtime not loaded");}
...
isc.DataSource.create({
allowAdvancedCriteria:true,
serverType:"sql",
generatedBy:"v8.2p_2012-09-17/EVAL Deployment 2012-09-17",
tableCode:"4bfc8e0b4cc96be5e84e5b74f7658456",
ID:"Memo",
logActionHistory:"true",
dataSourceVersion:1,
fields:[
{
hidden:true,
columnCode:"b338f6d675a1ce753b35867f41d784d9",
primaryKey:true,
name:"IDMEMO",
type:"sequence"
},
{
columnCode:"d504a5ea65b088497578bdd812714d51",
name:"Memo",
length:1000,
type:"text",
required:true
}
]
})
...
What version of the product are you using? On what operating system?
SmartClient Version: v10.0p_2015-02-28/PowerEdition Deployment (built
2015-02-28)
GWT 2.5.1
What browser(s) does this happen in? Are there any browsers where the
issue does not occur?
Chrome: Version 32.0.1700.107
FF: 26.0
Seems to occur on all
Please provide any additional information below.
At this stage there is no integrity on my system, without any validation we are
basically running blind. Customers are really getting anoid and have already
cancelled because of this.
We have tried everything, we have played around with adding implicit validation
rules, removing validation rules, implemented a cache filter, ensured our
character encoding is correct. However, after a few days random validation
rules are applied to the Text Items, we do not know who and how and by what
they are set, but it clearly ignores the validation defined in the datasource.
We thought that it had something to do with the loading of the datasources but
checking the datasource loader confirms that they are correct. We also thought
that is could have had something to do with the load balancing but we have been
unable to confirm this.
Here is the client logs, no server logs are recorded, this validation occurs in
the browser first, so no requests are sent to the server.
Server Side Problem
No server-side problem as it does not get past validation, so no request is
sent to the server
Stack Trace:
[CODE]
09:41:13.112:MDN6:INFO:EventHandler:Target Canvas for event 'mousedown':
[ImgTab ID:isc_Tab_35]
09:41:13.222:MUP0:INFO:EventHandler:Target Canvas for event 'mouseup': [ImgTab
ID:isc_Tab_35]
09:41:13.322:MUP0:INFO:ResultSet:isc_CrudListGrid_17:Creating new isc.ResultSet
for operation 'DxMemo_fetch' with filterValues: {
"operator":"and",
"criteria":[
{
"fieldName":"IDGROUP",
"operator":"equals",
"value":"207"
},
{
"fieldName":"IDEMPLOYEE",
"operator":"equals",
"value":"502"
},
{
"fieldName":"IDRESERVATION",
"operator":"equals",
"value":1034
}
],
"_constructor":"AdvancedCriteria"
}
09:41:13.323:MUP0:INFO:ResultSet:isc_ResultSet_58 (dataSource: DxMemo, created
by: isc_CrudListGrid_17):setCriteria: filter criteria changed, invalidating
cache
09:41:13.323:MUP0:INFO:ResultSet:isc_ResultSet_58 (dataSource: DxMemo, created
by: isc_CrudListGrid_17):Invalidating cache
09:41:13.324:MUP0:INFO:ResultSet:isc_ResultSet_58 (dataSource: DxMemo, created
by: isc_CrudListGrid_17):getRange(0, 1) will fetch from 0 to 75
09:41:13.325:MUP0:INFO:ResultSet:isc_ResultSet_58 (dataSource: DxMemo, created
by: isc_CrudListGrid_17):fetching rows 0,75 from server
09:41:13.345:MUP0:INFO:RPCManager:sendQueue[203]: 1 RPCRequest(s); transport:
xmlHttpRequest; target: https://apps.hti-systems.com/nova/no...2-21&isc_xhr=1
09:41:13.446:MUP0[E1]:INFO:RPCManager:sendQueue[204]: 1 RPCRequest(s);
transport: xmlHttpRequest; target:
https://apps.hti-systems.com/nova/no...2-21&isc_xhr=1
09:41:13.584:XRP4:INFO:RPCManager:transaction 203 arrived after 229ms
09:41:13.589:XRP4:INFO:RPCManager:rpcResponse(DxMemo_fetch)[fetch]: result: 1
records[status=0]
09:41:13.590:XRP4:INFO:xmlBinding:DxMemo:dsResponse is: {operationId:
"DxMemo_fetch",
clientContext: undef,
internalClientContext: Obj,
context: Obj,
transactionNum: 203,
httpResponseCode: 200,
httpResponseText: "//isc_RPCResponseStart-->[{affectedRows:..."[416],
xmlHttpRequest: [object XMLHttpRequest],
transport: "xmlHttpRequest",
status: 0,
clientOnly: undef,
httpHeaders: Obj,
isStructured: true,
callbackArgs: null,
results: Obj,
affectedRows: 0,
data: Array[1],
endRow: 1,
invalidateCache: false,
isDSResponse: true,
operationType: "fetch",
queueStatus: 0,
serverTime: Date(02/19/2015),
startRow: 0,
totalRows: 1}
09:41:13.591:XRP4:INFO:ResultSet:isc_ResultSet_58 (dataSource: DxMemo, created
by: isc_CrudListGrid_17):Received 1 records from server
09:41:13.591:XRP4:INFO:ResultSet:isc_ResultSet_58 (dataSource: DxMemo, created
by: isc_CrudListGrid_17):Fetch request returned range 0,1 differs from
requested range 0,75. Assuming client/server batch size mismatch and clearing
loading markers greater than 1
09:41:13.591:XRP4:INFO:ResultSet:isc_ResultSet_58 (dataSource: DxMemo, created
by: isc_CrudListGrid_17):cached 1 rows, from 0 to 1 (1 total rows, 1 cached)
09:41:13.592:XRP4:INFO:ResultSet:isc_ResultSet_58 (dataSource: DxMemo, created
by: isc_CrudListGrid_17):Cache for current criteria complete
09:41:13.642:XRP6:INFO:RPCManager:transaction 204 arrived after 189ms
09:41:13.646:XRP6:INFO:RPCManager:rpcResponse(custom)[rpc]: result: 1
records[status=0]
09:41:13.647:XRP6:INFO:xmlBinding:DxItinerary:dsResponse is: {operationId:
"custom",
clientContext: undef,
internalClientContext: Obj,
context: Obj,
transactionNum: 204,
httpResponseCode: 200,
httpResponseText: "//isc_RPCResponseStart-->[{affectedRows:..."[431],
xmlHttpRequest: [object XMLHttpRequest],
transport: "xmlHttpRequest",
status: 0,
clientOnly: undef,
httpHeaders: Obj,
isStructured: true,
callbackArgs: null,
results: Obj,
affectedRows: 0,
data: Array[1],
endRow: 1,
invalidateCache: false,
isDSResponse: true,
operationType: "fetch",
queueStatus: 0,
serverTime: Date(02/19/2015),
startRow: 0,
totalRows: 1}
09:41:13.649:XRP6:INFO:ResultSet:isc_ResultSet_59 (dataSource: DxItinerary,
created by: undefined):creating auto-operation for operationType: fetch
09:41:13.649:XRP6:INFO:ResultSet:isc_ResultSet_59 (dataSource: DxItinerary,
created by: undefined):setCriteria: filter criteria changed, invalidating cache
09:41:13.649:XRP6:INFO:ResultSet:isc_ResultSet_59 (dataSource: DxItinerary,
created by: undefined):Invalidating cache
09:41:37.939:MDN5:INFO:EventHandler:Target Canvas for event 'mousedown':
[ToolStripButton ID:isc_ToolStripButton_1]
09:41:38.041:MUP0:INFO:EventHandler:Target Canvas for event 'mouseup':
[ToolStripButton ID:isc_ToolStripButton_1]
09:41:38.065:MUP0:INFO:gridEdit:isc_CrudListGrid_17:Starting editing at row 1,
colNum 0
09:41:38.076:MUP0:INFO:gridEdit:isc_CrudListGrid_17_body:redraw with editors
showing, editForm.hasFocus: undefined
09:41:38.740:MDN7:INFO:EventHandler:Target Canvas for event 'mousedown':
[DynamicForm ID:isc_DynamicForm_11]
09:41:38.866:MUP8:INFO:EventHandler:Target Canvas for event 'mouseup':
[DynamicForm ID:isc_DynamicForm_11]
09:41:38.875:MUP8:INFO:EventHandler:isc_DynamicForm_11:Bubbling handleClick
event for isc_TextAreaItem_0
09:41:38.876:MUP8:INFO:EventHandler:isc_DynamicForm_11:Bubbling handleCellClick
event for isc_TextAreaItem_0
09:41:39.112:KDN0:INFO:EventHandler:keyDown event with Canvas target:
[TextAreaItem ID:isc_TextAreaItem_0 name:Memo], native target:
[TEXTAREAElement]{name:Memo}
09:41:39.218:INP1:INFO:RPCManager:sendQueue called with no current queue,
ignoring
09:41:41.084:MDN4:INFO:EventHandler:Target Canvas for event 'mousedown':
[GridBody ID:isc_CrudListGrid_17_body]
09:41:41.090:MDN4:INFO:gridEdit:isc_CrudListGrid_17:cellEditEnd: ending
editing, completion event: click_outside
09:41:41.093:MDN4:WARN:ResultSet:isc_ResultSet_58 (dataSource: DxMemo, created
by: isc_CrudListGrid_17):getRange(1, 2): start beyond end of rows, returning
empty list
09:41:41.097:MDN4:INFO:gridEdit:isc_CrudListGrid_17:validateFieldValue,
newValue: "
Now you have static variables and class variables (class variables only exists
while you have an object of type horse, once you destroy the horse object, the
variables dissapears with it). Static variables are created the first time you
mention a Horse and does not dissapear if the object is destroyed. Lets say you
have a static varable of type integer to count how many times the horse has
eaten and a class variable doing the same:
private int howManyTimesEaten;
private static int staticHowManyTimesEaten;
Every time you call the horse.eat() method both gets incremented by one:
Horse horse = new Horse();
horse.eat(); //howManyTimesEaten = 1, staticHowManyTimesEaten = 1
horse.eat(); //howManyTimesEaten = 2, staticHowManyTimesEaten = 2
horse = null;
Horse donkey = new Horse();
donkey.eat(); //howManyTimesEaten = 1, staticHowManyTimesEaten = 3", passed
validation: false, resultingValue: null
09:41:41.098:MDN4:INFO:gridEdit:isc_CrudListGrid_17:validateFieldValue,
newValue: undef, passed validation: true, resultingValue: null
09:41:41.098:MDN4:INFO:gridEdit:isc_CrudListGrid_17:validateFieldValue,
newValue: undef, passed validation: true, resultingValue: null
09:41:41.099:MDN4:INFO:gridEdit:isc_CrudListGrid_17:validateFieldValue,
newValue: undef, passed validation: true, resultingValue: null
09:41:41.100:MDN4:INFO:gridEdit:isc_CrudListGrid_17:validateFieldValue,
newValue: undef, passed validation: true, resultingValue: null
09:41:41.101:MDN4:INFO:gridEdit:isc_CrudListGrid_17:validateFieldValue,
newValue: undef, passed validation: true, resultingValue: null
09:41:41.102:MDN4:INFO:gridEdit:isc_CrudListGrid_17:validateFieldValue,
newValue: undef, passed validation: true, resultingValue: null
09:41:41.103:MDN4:INFO:RPCManager:sendQueue called with no current queue,
ignoring
09:41:41.211:MUP2:INFO:EventHandler:Target Canvas for event 'mouseup':
[GridBody ID:isc_CrudListGrid_17_body]
[/CODE]
Original issue reported on code.google.com by fa...@hti-systems.co.za on 4 Mar 2015 at 6:53
You've posted a lot of information, which is generally good, but you have not
posted anything that suggests a framework bug. The fact that the problem
suddenly starts happening after multiple days of deployment strongly suggests a
deployment issue. If you are loading the same SmartGWT client-side resources
there is no way for them to suddenly change behavior for newly loaded pages, so
you should look at how your server's responses differ when the problem begins,
especially the DataSourceLoader responses. You may ultimately discover an
issue such as your load balancing system serving stale or corrupted versions of
files.
Aside from the above, also please realize you are the only person reporting
this issue out of many, many users with SmartGWT-based applications
continuously available to millions of users - this makes it even less likely to
be a framework bug.
Until you've isolated a reproducible bug in SmartGWT (and you are not close to
this) you should continue to discuss this on the forums. If you would like
some assistance in troubleshooting from Isomorphic Support, you can purchase a
support plan starting here:
http://www.smartclient.com/services/index.jsp#support
Original comment by smartgwt...@gmail.com on 4 Mar 2015 at 7:28
Original issue reported on code.google.com by
fa...@hti-systems.co.za
on 4 Mar 2015 at 6:53Attachments:
The text was updated successfully, but these errors were encountered: