Commit 7d3b0ab0 by Tuukka Kivilahti, TKffTK

Merge branch 'master' of codecrew.fi:bortal

Conflicts:
	code/LanBortalDatabase/src/fi/insomnia/bortal/model/FoodWave.java
2 parents 9066cb2c d27bb797
...@@ -41,6 +41,9 @@ public class FoodWave extends GenericEntity { ...@@ -41,6 +41,9 @@ public class FoodWave extends GenericEntity {
@Temporal(TemporalType.TIMESTAMP) @Temporal(TemporalType.TIMESTAMP)
private Calendar time; private Calendar time;
@Column(name = "max_foods")
private Integer maximumFoods;
@Column(name = "wave_closed", nullable = false, columnDefinition = "boolean default false") @Column(name = "wave_closed", nullable = false, columnDefinition = "boolean default false")
private boolean closed = false; private boolean closed = false;
...@@ -147,6 +150,9 @@ public class FoodWave extends GenericEntity { ...@@ -147,6 +150,9 @@ public class FoodWave extends GenericEntity {
public List<BillLine> getBillLines() { public List<BillLine> getBillLines() {
return billLines; return billLines;
} }
public Integer getMaximumFoods() {
return maximumFoods;
}
public void setBillLines(List<BillLine> billLines) { public void setBillLines(List<BillLine> billLines) {
this.billLines = billLines; this.billLines = billLines;
...@@ -165,5 +171,8 @@ public class FoodWave extends GenericEntity { ...@@ -165,5 +171,8 @@ public class FoodWave extends GenericEntity {
return retval; return retval;
} }
public void setMaximumFoods(Integer maximumFoods) {
this.maximumFoods = maximumFoods;
}
} }
...@@ -7,6 +7,7 @@ package fi.insomnia.bortal.model; ...@@ -7,6 +7,7 @@ package fi.insomnia.bortal.model;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
...@@ -42,13 +43,16 @@ public class FoodWaveTemplate extends GenericEntity { ...@@ -42,13 +43,16 @@ public class FoodWaveTemplate extends GenericEntity {
@Column(name = "template_description") @Column(name = "template_description")
private String description; private String description;
@ManyToMany(mappedBy = "foodWaveTemplates") @ManyToMany(mappedBy = "foodWaveTemplates", cascade=CascadeType.ALL)
private List<Product> products; private List<Product> products;
@OneToMany(mappedBy = "template") @OneToMany(mappedBy = "template")
@OrderBy(value = "time") @OrderBy(value = "time")
private List<FoodWave> foodwaves; private List<FoodWave> foodwaves;
@Column(name = "max_foods")
private Integer maximumFoods;
public FoodWaveTemplate() { public FoodWaveTemplate() {
} }
...@@ -107,8 +111,8 @@ public class FoodWaveTemplate extends GenericEntity { ...@@ -107,8 +111,8 @@ public class FoodWaveTemplate extends GenericEntity {
public List<FoodWave> getOrderableFoodwaves() { public List<FoodWave> getOrderableFoodwaves() {
List<FoodWave> returnList = new ArrayList<FoodWave>(); List<FoodWave> returnList = new ArrayList<FoodWave>();
for(FoodWave wave : getFoodwaves()) { for (FoodWave wave : getFoodwaves()) {
if(wave.isOrderable()) { if (wave.isOrderable()) {
returnList.add(wave); returnList.add(wave);
} }
} }
...@@ -117,12 +121,3 @@ public class FoodWaveTemplate extends GenericEntity { ...@@ -117,12 +121,3 @@ public class FoodWaveTemplate extends GenericEntity {
} }
} }
...@@ -20,6 +20,7 @@ import javax.persistence.EnumType; ...@@ -20,6 +20,7 @@ import javax.persistence.EnumType;
import javax.persistence.Enumerated; import javax.persistence.Enumerated;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.JoinTable; import javax.persistence.JoinTable;
import javax.persistence.Lob;
import javax.persistence.ManyToMany; import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
...@@ -53,6 +54,9 @@ public class Product extends GenericEntity { ...@@ -53,6 +54,9 @@ public class Product extends GenericEntity {
@Column(name = "product_name") @Column(name = "product_name")
private String name; private String name;
@Column(name = "description")
@Lob
private String description;
@Column(name = "price", nullable = false, precision = 24, scale = 4) @Column(name = "price", nullable = false, precision = 24, scale = 4)
private BigDecimal price = BigDecimal.ZERO; private BigDecimal price = BigDecimal.ZERO;
...@@ -281,4 +285,12 @@ public class Product extends GenericEntity { ...@@ -281,4 +285,12 @@ public class Product extends GenericEntity {
this.productLimits = productLimits; this.productLimits = productLimits;
} }
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
} }
<!DOCTYPE html <!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" <html xmlns="http://www.w3.org/1999/xhtml"
xmlns:products="http://java.sun.com/jsf/composite/cditools/products" xmlns:users="http://java.sun.com/jsf/composite/cditools/user" xmlns:c="http://java.sun.com/jsp/jstl/core"> xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:products="http://java.sun.com/jsf/composite/cditools/products"
xmlns:users="http://java.sun.com/jsf/composite/cditools/user"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui">
<h:body> <h:body>
<ui:composition template="/layout/#{sessionHandler.layout}/template.xhtml"> <ui:composition
template="/layout/#{sessionHandler.layout}/template.xhtml">
<f:metadata> <f:metadata>
<f:event type="preRenderView" listener="#{foodWaveView.initCreateTemplate()}" /> <f:event type="preRenderView"
listener="#{foodWaveView.initCreateTemplate()}" />
</f:metadata> </f:metadata>
<ui:define name="title"> <ui:define name="title">
...@@ -15,12 +23,97 @@ ...@@ -15,12 +23,97 @@
<ui:define name="content"> <ui:define name="content">
<h:form> <h:form>
<p:wizard>
<p:tab id="basicinfo" title="#{i18n['foodwavetemplate.basicinfo']}">
<h:panelGrid columns="3"> <h:panelGrid columns="3">
<h:outputLabel for="name" value="#{i18n['foodwavetemplate.name']}" /> <h:outputLabel for="name"
<h:inputText id="name" value="#{foodWaveView.template.name}" /> value="#{i18n['foodwavetemplate.name']}" />
<h:inputText id="name" required="true"
value="#{foodWaveView.template.name}" />
<h:message for="name" /> <h:message for="name" />
<h:outputLabel for="description"
value="#{i18n['foodwavetemplate.description']}" />
<h:inputText id="description" required="true"
value="#{foodWaveView.template.description}" />
<h:message for="description" />
</h:panelGrid>
</p:tab>
<p:tab id="selectproducts"
title="#{i18n['foodwavetemplate.selectproducts']}">
<h:messages />
<h:panelGrid columns="4">
<h:outputText value="#{i18n['foodwavetemplate.productname']}" />
<h:outputText
value="#{i18n['foodwavetemplate.productdescription']}" />
<h:outputText value="#{i18n['foodwavetemplate.price']}" />
<h:outputText value="&nbsp;" />
<h:inputText id="productname" required="true"
value="#{foodWaveView.currentProduct.name}" />
<h:inputText id="productdescription" required="true"
value="#{foodWaveView.currentProduct.description}" />
<h:inputText id="price" required="true"
value="#{foodWaveView.currentProduct.price}" />
<p:commandButton value="#{i18n['foodwavetemplate.addproduct']}"
actionListener="#{foodWaveView.addProductToTemplate}"
update="productTable" />
</h:panelGrid> </h:panelGrid>
<h:commandButton action="#{foodWaveView.saveTemplate()}" value="#{i18n['foowavetemplate.create']}" /> <p:dataTable name="productTable" id="productTable"
value="#{foodWaveView.template.products}" var="product"
editable="true">
<p:column headerText="#{i18n['foodwavetemplate.productname']}">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{product.name}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{product.name}" style="width:100%" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column
headerText="#{i18n['foodwavetemplate.productdescription']}">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{product.description}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{product.description}" style="width:100%" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="#{i18n['foodwavetemplate.price']}">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{product.price}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{product.price}" style="width:100%" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="#{i18n['foodwavetemplate.editRow']}"
style="width:20px">
<p:rowEditor />
</p:column>
<p:column headerText="#{i18n['foodwavetemplate.actions']}"
style="width:20px;">
<p:commandButton
value="#{i18n['foodwavetemplate.removeFromList']}"
action="#{foodWaveView.removeProductFromList(product)}"
update="productTable" />
</p:column>
</p:dataTable>
<h:commandButton action="#{foodWaveView.saveTemplate()}"
value="#{i18n['foodwavetemplate.savetemplate']}" />
</p:tab>
</p:wizard>
</h:form> </h:form>
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
</f:metadata> </f:metadata>
<ui:param name="thispage" value="page.user.create" /> <ui:param name="thispage" value="page.user.create" />
<ui:define name="content"> <ui:define name="content">
<users:create creating="true" commitaction="#{userView.createUser()}" commitvalue="#{i18n['user.create']}" /> <users:create creating="true" commitaction="#{userView.createAdminUser()}" commitvalue="#{i18n['user.create']}" />
</ui:define> </ui:define>
</ui:composition> </ui:composition>
......
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
<div id="usercart" style="display: #{((userCartView.isEmpty())?'none':'block')};"> <div id="usercart" style="display: #{((userCartView.isEmpty())?'none':'block')};">
<h:outputText value="#{i18n['usercart.cartsize']}" /> <h:outputText value="#{i18n['usercart.cartsize']}" />
<h:outputText value=" #{userCartView.userCartSize}" /> <h:outputText value=" #{userCartView.userCartSize}" />
<h:commandButton action="#{userCartView.clearCart}" value="#{i18n['usercart.clear']}" /> <h:commandButton action="#{userCartView.clearCart()}" value="#{i18n['usercart.clear']}" />
<br /> <br />
<h:commandButton actionListener="#{userSearchView.addToCart}" value="#{i18n['usercart.addSearcherUsers']}" /> <h:commandButton actionListener="#{userSearchView.addToCart}" value="#{i18n['usercart.addSearcherUsers']}" />
<h:commandButton action="#{userCartView.traverse}" value="#{i18n['usercart.traverse']}" /> <h:commandButton action="#{userCartView.traverse}" value="#{i18n['usercart.traverse']}" />
......
...@@ -190,6 +190,25 @@ foodWave.time = Time ...@@ -190,6 +190,25 @@ foodWave.time = Time
foodshop.buyFromCounter = Pay at info foodshop.buyFromCounter = Pay at info
foodshop.buyFromInternet = Pay at Internet foodshop.buyFromInternet = Pay at Internet
foodwave.template.basicinfo = Template Information
foodwave.template.edit.title = Foodwave Template Editor
foodwave.template.selectproducts = Products
foodwavetemplate.actions = Actions
foodwavetemplate.addproduct = Add
foodwavetemplate.basicinfo = Template
foodwavetemplate.createFoodwave = Create Foodwave
foodwavetemplate.description = Description
foodwavetemplate.editRow = Edit
foodwavetemplate.name = Name
foodwavetemplate.price = Price
foodwavetemplate.productdescription = Description
foodwavetemplate.productname = Name
foodwavetemplate.removeFromList = Remove
foodwavetemplate.save = Ok
foodwavetemplate.savetemplate = Submit
foodwavetemplate.selectproducts = Products
game.gamepoints = Game points game.gamepoints = Game points
gamepoints = Gamepoints gamepoints = Gamepoints
......
...@@ -188,6 +188,25 @@ foodWave.time = Aika ...@@ -188,6 +188,25 @@ foodWave.time = Aika
foodshop.buyFromCounter = Maksa infossa foodshop.buyFromCounter = Maksa infossa
foodshop.buyFromInternet = Maksa Internetiss\u00E4 foodshop.buyFromInternet = Maksa Internetiss\u00E4
foodwave.template.basicinfo = Template Infot
foodwave.template.edit.title = Foodwave Template Editori
foodwave.template.selectproducts = Tuotteet
foodwavetemplate.actions = Toimet
foodwavetemplate.addproduct = Lis\u00E4\u00E4
foodwavetemplate.basicinfo = Templeitti
foodwavetemplate.createFoodwave = Luo ruokatilaus
foodwavetemplate.description = Kuvaus
foodwavetemplate.editRow = Muokkaa
foodwavetemplate.name = Nimi
foodwavetemplate.price = Hinta
foodwavetemplate.productdescription = Kuvaus
foodwavetemplate.productname = Nimi\r\n
foodwavetemplate.removeFromList = Poista
foodwavetemplate.save = Ok
foodwavetemplate.savetemplate = Tallenna
foodwavetemplate.selectproducts = Tuotteet
game.gamepoints = Insomnia Game pisteet: game.gamepoints = Insomnia Game pisteet:
gamepoints = Pelipisteit\u00E4 gamepoints = Pelipisteit\u00E4
......
package fi.insomnia.bortal.web.cdiview.shop; package fi.insomnia.bortal.web.cdiview.shop;
import java.util.ArrayList;
import java.util.TreeSet;
import java.util.Vector;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped; import javax.enterprise.context.ConversationScoped;
import javax.faces.model.ListDataModel; import javax.faces.model.ListDataModel;
...@@ -11,6 +15,8 @@ import fi.insomnia.bortal.beans.FoodWaveBeanLocal; ...@@ -11,6 +15,8 @@ import fi.insomnia.bortal.beans.FoodWaveBeanLocal;
import fi.insomnia.bortal.enums.apps.ShopPermission; import fi.insomnia.bortal.enums.apps.ShopPermission;
import fi.insomnia.bortal.model.FoodWave; import fi.insomnia.bortal.model.FoodWave;
import fi.insomnia.bortal.model.FoodWaveTemplate; import fi.insomnia.bortal.model.FoodWaveTemplate;
import fi.insomnia.bortal.model.Product;
import fi.insomnia.bortal.model.ProductFlag;
import fi.insomnia.bortal.web.cdiview.GenericCDIView; import fi.insomnia.bortal.web.cdiview.GenericCDIView;
@Named @Named
...@@ -34,6 +40,8 @@ public class FoodWaveView extends GenericCDIView { ...@@ -34,6 +40,8 @@ public class FoodWaveView extends GenericCDIView {
private FoodWave selectedFoodWave = null; private FoodWave selectedFoodWave = null;
private Product currentProduct;
public void initTemplateList() { public void initTemplateList() {
if (super.requirePermissions(ShopPermission.LIST_USERPRODUCTS)) { if (super.requirePermissions(ShopPermission.LIST_USERPRODUCTS)) {
...@@ -58,11 +66,37 @@ public class FoodWaveView extends GenericCDIView { ...@@ -58,11 +66,37 @@ public class FoodWaveView extends GenericCDIView {
if (super.requirePermissions(ShopPermission.MANAGE_PRODUCTS) && template == null) if (super.requirePermissions(ShopPermission.MANAGE_PRODUCTS) && template == null)
{ {
template = new FoodWaveTemplate(); template = new FoodWaveTemplate();
template.setProducts(new ArrayList<Product>());
template.setEvent(eventbean.getCurrentEvent()); template.setEvent(eventbean.getCurrentEvent());
createNewProductSkeleton();
super.beginConversation(); super.beginConversation();
} }
} }
private void createNewProductSkeleton() {
TreeSet<ProductFlag> ts = new TreeSet<ProductFlag>();
ts.add(ProductFlag.PREPAID_INSTANT_CREATE);
currentProduct = new Product();
currentProduct.setProductFlags(ts);
currentProduct.setEvent(eventbean.getCurrentEvent());
}
public void addProductToTemplate() {
template.getProducts().add(currentProduct);
createNewProductSkeleton();
}
public Product getCurrentProduct() {
return currentProduct;
}
public void setCurrentProduct(Product currentProduct) {
this.currentProduct = currentProduct;
}
public void initUserFoodWaveList() { public void initUserFoodWaveList() {
this.foodWaves = new ListDataModel<FoodWave>(foodWaveBean.getOpenFoodWaves()); this.foodWaves = new ListDataModel<FoodWave>(foodWaveBean.getOpenFoodWaves());
} }
...@@ -145,4 +179,8 @@ public class FoodWaveView extends GenericCDIView { ...@@ -145,4 +179,8 @@ public class FoodWaveView extends GenericCDIView {
this.templateId = templateId; this.templateId = templateId;
} }
public void removeProductFromList(Product product) {
template.getProducts().remove(product);
}
} }
...@@ -69,7 +69,8 @@ public class UserCartView extends GenericCDIView { ...@@ -69,7 +69,8 @@ public class UserCartView extends GenericCDIView {
updateCurrent(); updateCurrent();
return "/useradmin/userCartShow"; return "/useradmin/userCartShow";
} }
else return "/useradmin/list"; else
return "/useradmin/list";
} }
public String saveUser() { public String saveUser() {
...@@ -102,10 +103,10 @@ public class UserCartView extends GenericCDIView { ...@@ -102,10 +103,10 @@ public class UserCartView extends GenericCDIView {
} }
public void clearCart() { public String clearCart() {
if (usercart != null) if (usercart != null)
usercart.clear(); usercart.clear();
//return null; return null;
} }
public boolean isEmpty() { public boolean isEmpty() {
......
...@@ -14,7 +14,9 @@ import javax.inject.Named; ...@@ -14,7 +14,9 @@ import javax.inject.Named;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal; import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.utilities.I18n; import fi.insomnia.bortal.utilities.I18n;
@Named @Named
...@@ -29,12 +31,15 @@ public class UserValidator implements Serializable { ...@@ -29,12 +31,15 @@ public class UserValidator implements Serializable {
private static final Integer PASSWORD_MIN_LENGTH = 8; private static final Integer PASSWORD_MIN_LENGTH = 8;
@EJB @EJB
private transient UserBeanLocal userbean; private transient UserBeanLocal userbean;
@EJB
private transient PermissionBeanLocal permbean;
private static final Logger logger = LoggerFactory.getLogger(UserValidator.class); private static final Logger logger = LoggerFactory.getLogger(UserValidator.class);
public void validateEmail(FacesContext context, UIComponent ui, Object value) { public void validateEmail(FacesContext context, UIComponent ui, Object value) {
String email = (String) value; String email = (String) value;
if (email.indexOf('@') == -1) { if (!permbean.hasPermission(UserPermission.MODIFY) && (email == null || email.indexOf('@') == -1)) {
message(context, ui, "userview.invalidEmail"); message(context, ui, "userview.invalidEmail");
} }
} }
...@@ -53,6 +58,8 @@ public class UserValidator implements Serializable { ...@@ -53,6 +58,8 @@ public class UserValidator implements Serializable {
public void password(FacesContext context, UIComponent ui, Object object) { public void password(FacesContext context, UIComponent ui, Object object) {
logger.info("Executing pwd, firstpwd {}", firstpwd); logger.info("Executing pwd, firstpwd {}", firstpwd);
if (!permbean.hasPermission(UserPermission.MODIFY))
{
if (object == null) { if (object == null) {
message(context, ui, "user.passwordlengthMessage"); message(context, ui, "user.passwordlengthMessage");
return; return;
...@@ -65,10 +72,12 @@ public class UserValidator implements Serializable { ...@@ -65,10 +72,12 @@ public class UserValidator implements Serializable {
logger.info("Setting firstpwd to {} as {}", firstpwd, object.getClass()); logger.info("Setting firstpwd to {} as {}", firstpwd, object.getClass());
return; return;
} }
logger.info("Checking length"); logger.info("Checking length");
if (!firstpwd.equals(object)) { if (!firstpwd.equals(object)) {
message(context, ui, "userview.passwordsDontMatch"); message(context, ui, "userview.passwordsDontMatch");
} }
}
logger.info("Done pwd"); logger.info("Done pwd");
} }
......
...@@ -142,8 +142,8 @@ public class UserView extends GenericCDIView { ...@@ -142,8 +142,8 @@ public class UserView extends GenericCDIView {
// user = userbean.getEventUser(img.getUser()); // user = userbean.getEventUser(img.getUser());
// croppedImage = null; // croppedImage = null;
if (croppedImage == null)
if(croppedImage == null) return null; return null;
logger.info("Cropped image {}x{}", croppedImage.getLeft(), croppedImage.getTop()); logger.info("Cropped image {}x{}", croppedImage.getLeft(), croppedImage.getTop());
logger.info("Cropped data bytesize {}, type {}", croppedImage.getBytes().length, croppedImage.getOriginalFilename()); logger.info("Cropped data bytesize {}, type {}", croppedImage.getBytes().length, croppedImage.getOriginalFilename());
...@@ -166,18 +166,18 @@ public class UserView extends GenericCDIView { ...@@ -166,18 +166,18 @@ public class UserView extends GenericCDIView {
try { try {
mpr = cardPrintBean.getUserCardAsPrintablePdf(this.user.getId()); mpr = cardPrintBean.getUserCardAsPrintablePdf(this.user.getId());
file = File.createTempFile("cardprintout",null); file = File.createTempFile("cardprintout", null);
FileOutputStream fostream = new FileOutputStream(file); FileOutputStream fostream = new FileOutputStream(file);
fostream.write(mpr.getPdf()); fostream.write(mpr.getPdf());
fostream.close(); fostream.close();
setStreamedFile(new DefaultStreamedContent(new FileInputStream(this.file))); setStreamedFile(new DefaultStreamedContent(new FileInputStream(this.file)));
} catch(Exception e) { } catch (Exception e) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(e.getMessage())); FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(e.getMessage()));
} }
} }
public String acceptPrintedCard() { public String acceptPrintedCard() {
if(mpr != null && mpr.getAffectedUsers().size() > 0) { if (mpr != null && mpr.getAffectedUsers().size() > 0) {
cardPrintBean.acceptMassPrintResult(mpr); cardPrintBean.acceptMassPrintResult(mpr);
return "accepted"; return "accepted";
} else { } else {
...@@ -290,6 +290,12 @@ public class UserView extends GenericCDIView { ...@@ -290,6 +290,12 @@ public class UserView extends GenericCDIView {
return "/user/created"; return "/user/created";
} }
public String createAdminUser() {
userbean.createNewUser(user, getPassword());
canSave = permbean.hasPermission(UserPermission.MODIFY);
return "/useradmin/edit";
}
public void setUserid(Integer userid) { public void setUserid(Integer userid) {
this.userid = userid; this.userid = userid;
} }
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!