JSONArray json = JSONArray.fromObject(list);
logger.debug(json.toString());
PrintWriter out=response.getWriter();
out.println(json);
out.flush();
return null; // error: return mapping.findForward("success");
- 12月 16 週四 201017:08
java.lang.IllegalStateException: Committed之解
- 5月 04 週二 201014:17
標籤迷障II:JSTL與Struts Tag
<logic:iterate name='lazyForm' property='vo.accounts' id='acc'>
alert('<bean:write name="acc" property="name_tw" />');
</logic:iterate>
<c:forEach items="${lazyForm.map.vo.accounts}" var="acc" varStatus="status" >
alert('<c:out value="${acc.name_tw}" />');
</c:forEach>
- 5月 03 週一 201016:17
LazyValidatorForm在<html:form>標籤迷障
<form-beans>
<form-bean name="restrictedForm" type="org.apache.struts.validator.LazyValidatorForm">
<set-property property="restricted" value="true"/>
<form-property name="orderNumber" type="java.lang.Integer" />
<form-property name="customerName" type="java.lang.String" />
<form-property name="orderValue" type="java.lang.BigDecimal" />
<form-property name="orderLines" type="org.apache.commons.beanutils.LazyDynaBean[]" />
</form-bean>
</form-beans>
- 4月 29 週四 201017:58
在Struts1解決Date型態通透到前端問題
public class ActionServlet extends org.apache.struts.action.ActionServlet {
@Override
protected void initOther() throws ServletException {
super.initOther();
DateConverter d = new DateConverter(null);
String[] datePattern = { "yyyy/MM/dd", "yyyy/mm/dd HH:mm:ss", "yyyy-MM-dd", "yyyy.MM.dd" };
d.setPatterns(datePattern);
ConvertUtils.register(d, java.util.Date.class);
ConvertUtils.register(d, String.class);
}
}
- 4月 28 週三 201014:21
LazyValidatorForm:從Server到JSP
Accounts t = this.baseService.findById(new Integer(id));
DynaBean dynaForm = (DynaBean) form;
dynaForm.set("vo", t); // vo is a Java Bean
value="<bean:write name="lazyForm" property="vo.username" />" />
- 4月 19 週一 201016:20
LazyValidatorForm在JSP設值
String username = (String) dynaForm.get("username");
- 4月 16 週五 201001:37
Struts-Menu與A CSS Framework的co-work
/* body {
background: #fff;
font: 12px/1.5em Georgia,Serif;
}*/
ul.glassList {
list-style: url(../images/aquadot.jpg) disc outside;
margin-right: 50px;
}
/*
div#content {
margin:0;
padding: 1em;
clear:both;
width: 400px;
}
div#header {
margin-bottom: 0px;
}*/
- 4月 15 週四 201016:07
BeanUtils for Struts and Spring
<struts-config>
<form-beans>
<form-bean name="lazyForm" type="org.apache.struts.validator.LazyValidatorForm"/>
</form-beans>
<action-mappings>
<action path="/myActionPath" type="myPackage.MyAction" name="lazyForm" validate="true"/>
</action-mappings>
</struts-config>
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml"/>
</plug-in>
PropertyUtils.copyProperties(form, t); // 將Java Bean copy到Action Form
- 4月 12 週一 201000:30
Struts-Menu初體驗
MenuRepository repository = new MenuRepository();
this.getMenu(list, repository, username, null);
ServletContext sc = request.getSession().getServletContext();
MenuRepository defaultRepository =
(MenuRepository)sc.getAttribute(MenuRepository.MENU_REPOSITORY_KEY);
repository.setDisplayers(defaultRepository.getDisplayers());
request.getSession().setAttribute("repository", repository);
…
private void getMenu(
List<Functions> list,
MenuRepository repository,
String username,
MenuComponent pmc) throws Exception
{
for (Functions function : list) {
List<Functions> listSub = this.functionDao.find(sqlWhere, function.getId(), username);
MenuComponent mc = new MenuComponent();
if (pmc != null) mc.setParent(pmc);
mc.setTitle(function.getFunctionname());
mc.setName("L" + function.getId());
mc.setLocation(function.getUrl());
if (listSub != null && listSub.size() > 0) {
this.getMenu(listSub, repository, username, mc);
}
repository.addMenu(mc);
}
}
<%@ page pageEncoding="utf-8" language="java"%>
<%@ taglib uri="/WEB-INF/tld/jstl/c.tld" prefix="c" %>
<%@ taglib uri="/WEB-INF/tld/jstl/fmt.tld" prefix="fmt" %>
<%@ taglib uri="/WEB-INF/tld/jstl/fn.tld" prefix="fn" %>
<%@ taglib uri="/WEB-INF/tld/struts/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/tld/struts-menu/struts-menu.tld" prefix="menu"%>
<%@ taglib uri="/WEB-INF/tld/struts-menu/struts-menu-el.tld" prefix="menu-el"%>
<HTML>
<HEAD>
<TITLE>MENU</TITLE>
<html:base/>
<link href="css/struts-menu/menuExpandable.css" rel="stylesheet" type="text/css" media="screen" />
<link href="css/struts-menu/global.css" rel="stylesheet" type="text/css" media="all" />
<script src="js/struts-menu/menuExpandable.js" type="text/javascript"></script>
<link href="css/struts-menu/xtree.css" rel="stylesheet" type="text/css" media="all" />
<script src="js/struts-menu/xtree.js" type="text/javascript"></script>
</HEAD>
<BODY>
<h3>Function List</h3>
<script type="text/javascript">
<menu:useMenuDisplayer name="Velocity" config="/templates/xtree.html" repository="repository" bundle="">
if (document.getElementById) {
<c:forEach var="menu" items="${repository.topMenus}">
<menu-el:displayMenu name="${menu.name}"/>
</c:forEach>
}
</menu:useMenuDisplayer>
</script>
</BODY>
</HTML>
<listener>
<listener-class>net.sf.navigator.menu.MenuContextListener</listener-class>
</listener>
<plug-in className="net.sf.navigator.menu.MenuPlugIn">
<set-property property="menuConfig" value="/WEB-INF/menu-config.xml"/>
</plug-in>
<?xml version="1.0" encoding="UTF-8" ?>
<MenuConfig>
<Displayers>
<Displayer name="DropDown"
type="net.sf.navigator.displayer.DropDownMenuDisplayer"/>
<Displayer name="Simple"
type="net.sf.navigator.displayer.SimpleMenuDisplayer"/>
<Displayer name="CoolMenu"
type="net.sf.navigator.displayer.CoolMenuDisplayer"/>
<Displayer name="CoolMenu4"
type="net.sf.navigator.displayer.CoolMenuDisplayer4"/>
<Displayer name="MenuForm"
type="net.sf.navigator.example.PermissionsFormMenuDisplayer"/>
<Displayer name="ListMenu"
type="net.sf.navigator.displayer.ListMenuDisplayer"/>
<Displayer name="TabbedMenu"
type="net.sf.navigator.displayer.TabbedMenuDisplayer"/>
<Displayer name="Velocity"
type="net.sf.navigator.displayer.VelocityMenuDisplayer"/>
<Displayer name="XtreeMenu"
type="net.sf.navigator.displayer.XtreeMenuDisplayer"/>
<Displayer name="CSSListMenu"
type="net.sf.navigator.displayer.CSSListMenuDisplayer"/>
</Displayers>
<Menus>
</Menus>
</MenuConfig>
<dependency> <!-- struts.version= 1.3.10 -->
<groupId>org.apache.struts</groupId>
<artifactId>struts-core</artifactId>
<version>${struts.version}</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts-el</artifactId>
<version>${struts.version}</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts-taglib</artifactId>
<version>${struts.version}</version>
</dependency>
<dependency>
<groupId>struts-menu</groupId>
<artifactId>struts-menu</artifactId>
<version>2.4.3</version>
</dependency>
<!-- velocity -->
<dependency>
<groupId>velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>velocity-tools</groupId>
<artifactId>velocity-tools</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>velocity-tools</groupId>
<artifactId>velocity-tools-view</artifactId>
<version>1.4</version>
</dependency>
<dependency> <!-- 2009/4/25 -->
<groupId>opensymphony</groupId>
<artifactId>sitemesh</artifactId>
<version>2.4.2</version>
</dependency>
- 10月 20 週二 200915:54
Struts 2.1.6之後
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.5.8</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.5.8</version>
</dependency> SLF4J全名是Simple Logger Facade for Java,目的在於統一Log4J、java.util.logging、org.apache.commons.logging、logback(沒聽過)等log framework。唉!煩不煩啊!以前南韓政壇有感於政府有一堆養米蟲的委員會太多浪費公帑,經過決議,成立一個委員會來消滅這些委員會…XD。 第二、三道菜其實指的是同一個問題材料所煮。
Attempted: /template/ajax/head.ftl
The TemplateLoader provided by the FreeMarker Configuration was a: freemarker.cache.MultiTemplateLoader
<groupId>org.apache.struts</groupId>
<artifactId>struts2-dojo-plugin</artifactId>
<version>${struts.version}</version> <!-- 跟著最新的Struts2版本跑 -->
</dependency> 看來Struts2對Dojo挺不錯的。而到2.1.8版,據稱已支援osgi-plugin了。拜這頓飯粒所賜,也領教了Hibernate自動在MySQL生成Table的威力。
