I have been looking at those examples. I cant find any that have the needs
I have.
I am displaying one product, so the page need the id of the product. Which
it get from the previous page...
But I wanna stay on the page after saving... the examples return to another
page.

I am trying to do some like this..
http://click.avoka.com/click-examples/source-viewer.htm?filename=WEB-INF/classes/org/apache/click/examples/page/table/FormTablePage.java
Here all the customers are fetched...

*public* DataProvider createDataProvider() {
        DataProvider dp = *new* DataProvider() {
            *public* List<Customer> getData() {
                *return* customerService.getCustomersSortedByName(NUM_ROWS);
            }
        };
   *return* dp;
}

Whereas I need to get the options from a specific product.



I now managed to be able to stay on the page, so the productId is used in
the save methods..

Long id = Long.parseLong(idField1.getValue());
HashMap<String, String> m = new HashMap<String, String>();
m.put("productId", "" + id);
setRedirect(EditProduct.class, m);


The problem now is that in the in the method onSaveOptionFormTable()
the
List<ProductOptionEnt> productOptions = optionFormTable.getRowList();
is empty.

So no options are updated...

and the onInit() method has no productId.


/**
 */
public class EditProduct extends BorderedPage {
private static final Logger logger =
LoggerFactory.getLogger(EditProduct.class);

private static final String PAGE_TITLE_CREATE = "Add Product";
private static final String PAGE_TITLE_EDIT = "Edit Product";
private static final int MIN_NAME_LENGTH = 3;
private static final int VALIDATE_NAME_LENGTH = 50;

private DashboardSBBeanLocal dashboardSBBeanLocal =
SessionBeanManager.getDashboardSBBeanLocal();
private Form form = new Form("form");
private ProductEnt product;
private FormTable optionFormTable = new FormTable("optionFormTable");
private FormTable quantityFormTable = new FormTable("quantityFormTable");
private ActionLink deleteOptionLink = new ActionLink("deleteOptionLink",
"Delete", this, "onDeleteProductOptionClick");
private ActionLink deleteQuantityLink = new
ActionLink("deleteQuantityLink", "Delete", this,
"onDeleteProductQuantityClick");
private PagingDataProvider<ProductOptionEnt> productOptionDataProvider =
null;
private PagingDataProvider<ProductOptionEnt> productQuantityDataProvider =
null;
private TextField productName = new TextField("name", "Product name ",
true);
protected HiddenField idField = new HiddenField("id", Long.class);
protected HiddenField idField1 = new HiddenField("id", Long.class);
protected HiddenField idField2 = new HiddenField("id", Long.class);

/**
 * Bindable variable id automatically have the value set by request
 * parameters
 */
public Long productId;

public EditProduct() {
try {
form.add(idField);
productName.setMinLength(MIN_NAME_LENGTH);
productName.addStyleClass("dash_input");
form.add(productName);

deleteOptionLink.addStyleClass("btn_small btn-primary");
deleteOptionLink.setTitle("Delete record");
deleteOptionLink.setAttribute("onclick", "return window.confirm('Are you
sure you want to delete this record?', 'Delete Product Option');");
addControl(deleteOptionLink);

deleteQuantityLink.addStyleClass("btn_small btn-primary");
deleteQuantityLink.setTitle("Delete record");
deleteQuantityLink.setAttribute("onclick", "return window.confirm('Are you
sure you want to delete this record?', 'Delete Product Option');");
addControl(deleteQuantityLink);

setOptionFormTable();
addControl(optionFormTable);
setQuantityFormTable();
addControl(quantityFormTable);

PageLink addLink = new PageLink("add", " New Option ", EditProduct.class);
addLink.setId("new_option");
addLink.addStyleClass("btn btn-primary");
addControl(addLink);

form.setButtonAlign("right");
Button button = new Submit("save", "Save", this, "onSave");
button.addStyleClass("btn btn-primary");
form.add(button);

PageSubmit pageSubmit = new PageSubmit("cancel", "Cancel", Products.class);
pageSubmit.addStyleClass("btn btn-primary");
form.add(pageSubmit);

// optionFormTable
button = new Submit("save", "Save", this, "onSaveOptionFormTable");
button.addStyleClass("btn btn-primary");
optionFormTable.getForm().add(button);

button = new Submit("cancel", "Cancel", this, "onCancelOptionFormTable");
button.addStyleClass("btn btn-primary");
optionFormTable.getForm().add(button);

// quantityFormTable
button = new Submit("save", "Save", this, "onSaveQuantityFormTable");
button.addStyleClass("btn btn-primary");
quantityFormTable.getForm().add(button);

button = new Submit("cancel", "Cancel", this, "onCancelQuantityFormTable");
button.addStyleClass("btn btn-primary");
quantityFormTable.getForm().add(button);

optionFormTable.getForm().add(idField1);
quantityFormTable.getForm().add(idField2);
addControl(form);

} catch (NumberFormatException e) {
logger.error(e.getMessage(), e);
setRedirect(com.farheap.jsi.dashboard.pages.errors.Error.class);
return;
}

}

@SuppressWarnings("unchecked")
@Override
public void onGet() {
try {
 if (productId != null) {
idField.setValueObject(productId);
idField1.setValueObject(productId);
idField2.setValueObject(productId);
deleteOptionLink.setParameter("productId", "" + productId);
deleteQuantityLink.setParameter("productId", "" + productId);
product = dashboardSBBeanLocal.getProduct(productId);
if (product == null) {
getContext().setFlashAttribute("entityErrorMessage", "You tried to edit
product that does not exist!");
getContext().setFlashAttribute("link", new PageLink("pageLink", "Products",
Products.class));
setRedirect(com.farheap.jsi.dashboard.pages.errors.EntityDoesNotExist.class);
return;
} else {
//productIdField.setValueObject(product.getId());
productName.setValue(product.getName());
optionFormTable.getControlLink().setParameter("productId", product.getId());
quantityFormTable.getControlLink().setParameter("productId",
product.getId());
}

productOptionDataProvider = new PagingDataProvider() {
@Override
public int size() {
Integer size = 0;
try {
Long id =
Long.parseLong(optionFormTable.getControlLink().getParameter("productId"));
size =
Integer.parseInt(dashboardSBBeanLocal.getProductOptionCount(id).toString());
} catch (SystemException e) {
logger.error(e.getMessage(), e);
setRedirect(com.farheap.jsi.dashboard.pages.errors.Error.class);
}
return size;
}

@Override
public List<ProductOptionEnt> getData() {
List<ProductOptionEnt> productOptions = null;
int start = optionFormTable.getFirstRow();
int count = optionFormTable.getPageSize();
String sortColumn = optionFormTable.getSortedColumn();
boolean ascending = optionFormTable.isSortedAscending();
Long id =
Long.parseLong(optionFormTable.getControlLink().getParameter("productId"));
try {
productOptions = dashboardSBBeanLocal.getProductOptions(id, start, count,
sortColumn, ascending);
} catch (SystemException e) {
logger.error(e.getMessage(), e);
setRedirect(com.farheap.jsi.dashboard.pages.errors.Error.class);
}
return productOptions;
}
};
optionFormTable.setDataProvider(productOptionDataProvider);

List<ProductOptionEnt> rowList = optionFormTable.getRowList();
for (ProductOptionEnt productOptionEnt : rowList) {
com.farheap.jsi.utils.Constants.Option optionType =
productOptionEnt.getOptionType();
List<EnumI> enums = optionType.getEnums();
Select select = new Select();
for (EnumI enumI : enums) {
select.add(enumI.name());
}
FieldColumn column = (FieldColumn) optionFormTable.getColumn("value");
column.setField(select);

}

productQuantityDataProvider = new PagingDataProvider() {
@Override
public int size() {
Integer size = 0;
try {
Long id =
Long.parseLong(quantityFormTable.getControlLink().getParameter("productId"));
size =
Integer.parseInt(dashboardSBBeanLocal.getProductQuantityCount(id).toString());
} catch (SystemException e) {
logger.error(e.getMessage(), e);
setRedirect(com.farheap.jsi.dashboard.pages.errors.Error.class);
}
return size;
}

@Override
public List<ProductQuantityEnt> getData() {
List<ProductQuantityEnt> productQuantities = null;
int start = quantityFormTable.getFirstRow();
int count = quantityFormTable.getPageSize();
String sortColumn = quantityFormTable.getSortedColumn();
boolean ascending = quantityFormTable.isSortedAscending();
Long id =
Long.parseLong(quantityFormTable.getControlLink().getParameter("productId"));
try {
productQuantities = dashboardSBBeanLocal.getProductQuantities(id, start,
count, sortColumn, ascending);
} catch (SystemException e) {
logger.error(e.getMessage(), e);
setRedirect(com.farheap.jsi.dashboard.pages.errors.Error.class);
}
return productQuantities;
}
};
quantityFormTable.setDataProvider(productQuantityDataProvider);
}
} catch (NumberFormatException | SystemException e) {
logger.error(e.getMessage(), e);
setRedirect(com.farheap.jsi.dashboard.pages.errors.Error.class);
return;
}

}

@Override
public void onInit() {
super.onInit();
String value = getContext().getRequestParameter("productId");
System.out.println(value);
System.out.println(productId);
}

@Override
public final String getTitle() {
if (product == null) {
return PAGE_TITLE_CREATE;
} else {
return PAGE_TITLE_EDIT;
}
}

public final boolean onSave() throws SystemException {
if (form.isValid()) {
Long id = Long.parseLong(idField.getValue());
if (id == null) {
ProductEnt productEnt = new ProductEnt();
PrintProviderEnt printProviderEnt =
dashboardSBBeanLocal.getPrintProviderByName(getContext().getRequest().getUserPrincipal().getName());
productEnt.setPrintProviderEnt(printProviderEnt);
form.copyTo(productEnt);
dashboardSBBeanLocal.saveProduct(productEnt);
} else {
ProductEnt productEnt = dashboardSBBeanLocal.getProduct(id);
form.copyTo(productEnt);
dashboardSBBeanLocal.saveProduct(productEnt);
}
form.clearValues();
HashMap<String, String> m = new HashMap<String, String>();
m.put("productId", "" + id);
setRedirect(EditProduct.class, m);
}
return true;
}

public boolean onSaveOptionFormTable() throws SystemException {
if (optionFormTable.getForm().isValid()) {
List<ProductOptionEnt> productOptions = optionFormTable.getRowList();
dashboardSBBeanLocal.saveProductOptions(productOptions);
}
Long id = Long.parseLong(idField1.getValue());
HashMap<String, String> m = new HashMap<String, String>();
m.put("productId", "" + id);
setRedirect(EditProduct.class, m);
return true;
}

public boolean onCancelOptionFormTable() throws SystemException {
optionFormTable.setDataProvider(productOptionDataProvider);
// As form was cancelled, don't render the user submitted values
optionFormTable.setRenderSubmittedValues(false);
return true;
}

public boolean onSaveQuantityFormTable() throws SystemException {
if (quantityFormTable.getForm().isValid()) {
List<ProductQuantityEnt> productQuantities = quantityFormTable.getRowList();
dashboardSBBeanLocal.saveProductQuantities(productQuantities);
}
Long id = Long.parseLong(idField2.getValue());
HashMap<String, String> m = new HashMap<String, String>();
m.put("productId", "" + id);
setRedirect(EditProduct.class, m);
return true;
}

public boolean onCancelQuantityFormTable() throws SystemException {
quantityFormTable.setDataProvider(productQuantityDataProvider);
// As form was cancelled, don't render the user submitted values
quantityFormTable.setRenderSubmittedValues(false);
return true;
}

public boolean onDeleteProductQuantityClick() throws SystemException {
Long id = deleteQuantityLink.getValueLong();
dashboardSBBeanLocal.deleteQuantity(id);
HashMap<String, String> m = new HashMap<String, String>();
m.put("productId", deleteOptionLink.getParameter("productId"));
setRedirect(EditProduct.class, m);
return true;
}

public boolean onDeleteProductOptionClick() throws SystemException {
Long id = deleteOptionLink.getValueLong();
dashboardSBBeanLocal.deleteProductOption(id);
HashMap<String, String> m = new HashMap<String, String>();
m.put("productId", deleteOptionLink.getParameter("productId"));
setRedirect(EditProduct.class, m);
return true;
}

@Override
public String getHelp() {
return getContext().getRequest().getContextPath() +
"/provider/edit-product-help.htm";
}

private void setQuantityFormTable() {
                  ...

}

private void setOptionFormTable() {
...
}
public TextField getProductName() {
return productName;
}
}





On Tue, Aug 6, 2013 at 4:24 PM, Gilberto <[email protected]> wrote:

>
> Kristian, I would like to suggest another alternative until you get used
> to the click framework. The view->edit[1] and view->insert pattern is a
> good point to start and after you have more expirience with the framework
> you can do more experiments.
> That was what I did [2] and after that I could understand how the
> framework is simple.
>
>
> [1] http://click.avoka.com/click-examples/table/edit-table.htm
> [2]
> https://code.google.com/p/construtor/source/browse/trunk/park-samples/#
>
> 2013/8/6 Kristian Lind <[email protected]>
>
>> The problem is I have no where to get the Id from in the onSave method..
>> the idField is empty and is not set the in the OnGet() method cause the
>> request parameter is null.
>>
>> I wanna do
>>
>> HashMap<String, String> m = new HashMap<String, String>();
>> m.put("productId", idField.getValue());
>> setRedirect(EditProduct.class, m);
>>
>> if I test with a hardcoded id
>> HashMap<String, String> m = new HashMap<String, String>();
>> m.put("productId", "1");
>> setRedirect(EditProduct.class, m);
>>
>> it works... so I don't think I have to use the alternative redirect
>> methods.
>>
>>
>> --
>>
>>> Best regards
>>>>
>>>> Kristian Lind
>>>>
>>>
>>>
>>
>>
>> --
>> Best regards
>>
>> Kristian Lind
>>
>
>


-- 
Best regards

Kristian Lind

Reply via email to