[Tapestry4] Tapestry4.1 使用@For组件显示newsList的问题。

tidus2005 2008-05-09
本人公司项目需要使用Tapestry4.1
需要在页面上显示一个新闻列表:

页面显示:
Application Error
Some user action caused serious application error.

org.apache.tapestry.BindingException: Unable to update OGNL expression '<parsed OGNL expression>' of $Home_0@3c1[Home] to title='Bosch worries about 2009 after U.S. consumer slump';description='U.S. consumers worried about a recession will take a painful toll this year on Bosch Group, a German manufacturer of a wide range of items from car parts to washing machines and power tools.';url='http://www.autonews.com/article/20080508/ANA02/92908385/1193/rss01&rssfeed=rss01';author='null';publicationDate='null': $Home_0.currentNews [context:/Home.page, line 10, column 49]

Home.java
public abstract class Home extends BasePage {
	private static final Logger LOGGER = Logger.getLogger(Home.class);

	@Bean
	public abstract ValidationDelegate getDelegate();

	@InjectObject("spring:newsGrabService")
	public abstract NewsGrabService getNewsGrabService();

	@InjectObject("spring:authenticationService")
	public abstract AuthenticationService getAuthenticationService();

	@InjectObject("spring:sectionService")
	public abstract SectionService getSectionService();

	@InjectObject("engine-service:page")
	public abstract IEngineService getPageService();

	public abstract String getUserName();

	public abstract void setUserName(String userName);

	public abstract String getPassword();

	public abstract void setPassword(String password);

	public abstract String getErrorMessage();

	public abstract void setErrorMessage(String errorMessage);


	/**
	 * Login form action
	 * 
	 * @return redirect to Home or dealer.Home page.
	 */
	public ILink doLogin() {
		Authentication authentication;
		try {
			authentication = getAuthenticationService().login(getUserName(),
					getPassword() != null ? getPassword() : "");
		} catch (BadCredentialsException e) {
			getDelegate().record(null, "Authentication failed");
			return null;
		}
		if (authentication instanceof DealerAuthenticationToken) {
			return getPageService().getLink(false, "dealer/Home");
		} else if (authentication instanceof AdministratorAuthenticationToken) {
			return getPageService().getLink(false, "admin/Home");
		} else {
			LOGGER.error("Authentication token is not supported: "
					+ authentication);
			throw new IllegalStateException(
					"Authentication token is not supported: " + authentication);
		}
	}

	public Section getContent(String id) {
		return getSectionService().findSection(id);
	}
	
	private List<News> newsList = new ArrayList<News>();
	public List<News> getNewsList() {
		NewsGrabService newsGrabService = getNewsGrabService();
		List<News> newses = newsGrabService.getAllCachedNews();
		return newses;
	}
	public void setNewsList(List<News> newsList) {
		this.newsList = newsList;
	}
}


<table cellpadding="0" cellspacing="0">
									<tr jwcid="@For" source="ognl:newsList" value="ognl:news" keyExpression="id" element="tr">
										<td>
											<div class="home-content-panel-air-inner"
												style="background-color: #FFFFFF">
												<b><span jwcid="@Insert" value="ognl:news.title">Test Title</span></b> - 
												<span jwcid="@Insert" value="ognl:news.description">Test description</span>...
											</div>
										</td>
									</tr>
</table>


<?xml version="1.0"?>
<!DOCTYPE page-specification PUBLIC 
  "-//Apache Software Foundation//Tapestry Specification 4.0//EN" 
  "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
  
<page-specification>
    <asset name="common" path="/css/common.css" />
</page-specification>


特此请教大家!
tidus2005 2008-05-09
请大家帮帮忙! 谢谢!!!!
tapestry 2008-05-10
有Home.page文件么,贴一下。

还有
# private List<News> newsList = new ArrayList<News>(); 
#     public List<News> getNewsList() { 
#         NewsGrabService newsGrabService = getNewsGrabService(); 
#         List<News> newses = newsGrabService.getAllCachedNews(); 
#         return newses; 
#     } 
#     public void setNewsList(List<News> newsList) { 
#         this.newsList = newsList; 
#     } 
这个是什么意思,直接留
public List<News> getNewsList() { 
         NewsGrabService newsGrabService = getNewsGrabService(); 
         List<News> newses = newsGrabService.getAllCachedNews(); 
         return newses; 
     }
这些就可以了,其它的去掉。
Global site tag (gtag.js) - Google Analytics