dynamic dialog works in dev environment but not when deployed

29 views
Skip to first unread message

Jirka

unread,
Jan 14, 2011, 1:57:30 PM1/14/11
to Google Web Toolkit
Hello all,

I have a strange problem with my code not working when deployed even
though it works fine in my dev environment (Eclipse GWT plugin). It
is a simple widget in a dialog box that gets opened when one clicks on
a hyperlink in maps info window.

The widget has one ListBox and TextArea and when one switches item in
the ListBox it updates the TextArea with corresponding text and saves
the text from the TextArea that was selected before. The ListBox gets
its data via RPC from app engine on load and the data for the TextArea
is passed to the widget constructor on creation, previously also
fetched via RPC from the app engine. The ListBox represents area of
study, while the TextArea is a goal for that area.

My problem is that when deployed, switching items in the ListBox does
not switch the text at all. I debug this using Window.alert
onChange() and I know that the data the dialog gets from the app
engine are correct and are all there on load from another
Window.alert() debug box I put in. However when I switch items, the
Window.alert debug box says there are no goals set for that area of
study, even though when the dialog first loads, the debug box shows
they are all there. The first item selected does have correct text on
load but the rest is just gone. The ListBox data is also fine. Also
the data is there because it is also correctly displayed in the info
window. What is wrong? Where is the problem since it works fine in
my dev. environment but not when deployed?

Here is the code for the form

public class DotaznikForm extends Composite {

private final OkruhyServiceAsync okruhyService = GWT
.create(OkruhyService.class);
private final Dotaznik dotaznik;
private final List<Okruh> okruhy = new LinkedList<Okruh>();
private VerticalPanel vp = new VerticalPanel();
private final TextArea textCile = new TextArea();
private final ListBox okruhyListBox = new ListBox();
private int lastSelected;

DotaznikForm(Dotaznik d) {
this.dotaznik = d;

((ServiceDefTarget) okruhyService)
.setServiceEntryPoint("/volebnicile/okruhyService");
okruhyService.getOkruhy(new AsyncCallback<Okruh[]>() {

@Override
public void onSuccess(Okruh[] result) {
// The first debug alert on load
StringBuffer s=new StringBuffer("Number of cilu:
"+dotaznik.getCile().size()+"\n\n");
for (Cil c:dotaznik.getCile())
s.append("ID: "+c.getId()+" ---> "+c.getTextCile()+"\n");
Window.alert(s.toString());

for (Okruh o : result) {
okruhyListBox.addItem(o.getPopisOkruhu());
}
okruhy.addAll(Arrays.asList(result));
okruhyListBox.setSelectedIndex(0);
if (!dotaznik.getCile().isEmpty()) {

textCile.setText(getCilByOkruh(getSelectedOkruh()).getTextCile());
}

okruhyListBox.setWidth("50em");

textCile.setSize("50em", "30em");

okruhyListBox.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
setLastSelected(okruhyListBox.getSelectedIndex());
}
});

okruhyListBox.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
saveDotaznik();
updateDotaznikForm();
}
});

vp.setSpacing(5);
vp.add(okruhyListBox);
vp.add(textCile);
}

@Override
public void onFailure(Throwable caught) {
Window.alert("getOkruhy:There was an error getting data from
server");
}
});


initWidget(vp);
}

private void updateDotaznikForm() {
Cil c = getCilByOkruh(getSelectedOkruh());

if (c != null) {
Window.alert("Cil: "+c.getTextCile()+"\nOkruh:
"+getSelectedOkruh().getPopisOkruhu());
textCile.setText(c.getTextCile());}
else {
Window.alert("Pro Okruh "+getSelectedOkruh().getPopisOkruhu()+"neni
definovan zadny cil");
textCile.setText("");}
}

private Cil getCilByOkruh(Okruh o) {
if (dotaznik.getCile() != null)
for (Cil c : dotaznik.getCile())
if (c.getOkruhKey() == o.getId())
return c;
return null;
}

private Okruh getOkruhByPopis(String popis) {
for (Okruh o : okruhy)
if (o.getPopisOkruhu().equals(popis))
return o;
return null;
}

private Okruh getSelectedOkruh() {
return getOkruhByPopis(okruhyListBox.getItemText(okruhyListBox
.getSelectedIndex()));
}

private void saveDotaznik() {
Okruh o =
getOkruhByPopis(okruhyListBox.getItemText(getLastSelected()));
if (this.dotaznik.getCile().isEmpty() && !
textCile.getText().equals(""))
this.dotaznik.addCil(new Cil(textCile.getText(), o));
else {
Cil c = getCilByOkruh(o);
if (c == null && !textCile.getText().equals(""))
this.dotaznik.addCil(new Cil(textCile.getText(), o));
else if (c != null && !textCile.getText().equals(""))
c.setTextCile(textCile.getText());
else
dotaznik.deleteCil(c);
}
}

protected void closeDotaznik() {
if (textCile.getText().equals(""))
dotaznik.deleteCil(getCilByOkruh(getSelectedOkruh()));
else {
Cil c=getCilByOkruh(getSelectedOkruh());
if (c==null)
dotaznik.addCil(new Cil(textCile.getText(), getSelectedOkruh()));
else
c.setTextCile(textCile.getText());
}
}

protected Dotaznik getDotaznik() {
return this.dotaznik;
}

private void setLastSelected(int i) {
lastSelected = i;
}

private int getLastSelected() {
return lastSelected;
}
}

and here is a code that creates it and shows it in a dialog

@Override
public void onClick(ClickEvent event) {
ds.getDotaznik(o.getDotaznikId(), new AsyncCallback<Dotaznik>() {

@Override
public void onFailure(Throwable caught) {
Window.alert("getDotaznik: There was an error getting data from
server");
}

@Override
public void onSuccess(Dotaznik result) {
DotaznikForm dotaznikForm;
if (result == null)
dotaznikForm = new DotaznikForm(new Dotaznik());
else
dotaznikForm = new DotaznikForm(result);

VerticalPanel dotaznikPanel = new VerticalPanel();
HorizontalPanel buttonPanel = new HorizontalPanel();

Button closeButton = new Button("Ukoncit");

closeButton.addClickHandler(new CloseClickHandler(o,
dotaznikForm));

buttonPanel.add(closeButton);
dotaznikPanel.add(dotaznikForm);
dotaznikPanel.add(buttonPanel);
dotaznikDialog.setWidget(dotaznikPanel);
dotaznikDialog.center();
dotaznikDialog.show();
}
});
}
}

Thanks in advance for any help.

-Jirka





Jirka

unread,
Jan 7, 2013, 5:40:31 PM1/7/13
to google-we...@googlegroups.com
Looking back in time, I found the problem.  It was Java autoboxing wackiness which happened to manifest itself @ the wrong time.  There is discussion about it on http://bexhuff.com/java-autoboxing-wackiness.

Figured someone might be interested.

-J
Reply all
Reply to author
Forward
0 new messages