您的位置:首页 > Web前端 > JavaScript

在jsp页面中实现递归显示树状结构(树状bbs)

2013-01-09 20:41 381 查看
1.自定义标签类:

javax.servlet.jsp.tagext.BodyTagSupport——导入此包

public class SubNodesTag extends BodyTagSupport {

/**

*

*/

private static final long serialVersionUID = 1396571704883585147L;

private BbsMessage bbsMessage;

private String proposalId;

private int level = 0;

private static final String DATE_FORMAT = "yyyy/MM/dd HH:mm:ss";

/**

* @param bbsMessage

* the bbsMessage to set

*/

public void setBbsMessage(final BbsMessage bbsMessage) {

this.bbsMessage = bbsMessage;

}

/**

* @param proposalId

* the proposalId to set

*/

public void setProposalId(final String proposalId) {

this.proposalId = proposalId;

}

/**

* {@inheritDoc}

*/

@Override

public int doEndTag() throws JspException {

this.getSubNodes(bbsMessage, proposalId);

return EVAL_PAGE;

}

/**

* 取得每一层消息的子结点

* @param bbsMessage BbsMessage

* @param proposalId String

*/

private void getSubNodes(final BbsMessage bbsMessage, final String proposalId) {

// 取得首层子结点

List<BbsMessage> subNodes = bbsMessage.getSubNodes();

level++;

if (subNodes.size() > 0) {

// 遍历子结点

for (BbsMessage m : subNodes) {

try {

pageContext.getOut().print("<tr><td>");

for (int i = 0; i < level; i++) {

pageContext.getOut().print(" ");

}

pageContext.getOut().print("<a href=/"bulletinBoard.do?proposalId=");

pageContext.getOut().print(proposalId);

pageContext.getOut().print("&messageId=");

pageContext.getOut().print(m.getMessageId());

pageContext.getOut().print("/">");

pageContext.getOut().print(TagUtils.convertHtml(m.getTitle()));

pageContext.getOut().print("</a>");

pageContext.getOut().print(" 亅");

pageContext.getOut().print(TagUtils.convertHtml(m.getDisplayUserName()));

pageContext.getOut().print(" 亅");

pageContext.getOut().print(new SimpleDateFormat(DATE_FORMAT).format(m.getCreatedDatetime()));

pageContext.getOut().print("</td></tr>");

this.getSubNodes(m, proposalId);

level--;

} catch (IOException ioe) {

ioe.printStackTrace();

}

}

}

}

}



这样就完成了对一个自定义标签的定义



2.配置:

在.tld文件里进行如下配置:

<tag>

<description>

Display the subNodes.

</description>

<name>subNodes</name>

<tag-class>xxx.products.sms.sourcing.web.tag.SubNodesTag</tag-class>

<body-content>JSP</body-content>

<attribute>

<description>BbsMessageModel</description>

<name>bbsMessage</name>

<required>true</required>

<rtexprvalue>true</rtexprvalue>

</attribute>

<attribute>

<description>ProposalId</description>

<name>proposalId</name>

<required>true</required>

<rtexprvalue>true</rtexprvalue>

</attribute>

</tag>

其中attribute表示标签使用时所需要的参数。



3.完成对bbsMessage的初始化(取到所有子结点):

private List<BbsMessage> getSubNodes(String parentMessageId) throws DataConnectException, DataPropertyException, DataAccessException {

// 在DB层取出第一层子结点

List<BbsMessage> subNodes = bbsMessageDao.getBbsMessageByParentMessageId(parentMessageId);

if (subNodes.size() > 0) {

// 遍历子结点;

bbsMessage.setSubNodes(getSubNodes(bbsMessage.getMessageId(), ));

}

}

return subNodes;

}



4.在jsp页面中进行引用:

<table>

<c:if test="${not empty bbsMessage.subNodes}">

<nbs:subNodes bbsMessage="${bbsMessage}"

proposalId="${proposalId}"></nbs:subNodes>

</c:if>

</table>



这样就可以实现在页面里的树状消息体,类似于windows资源管理器的功能,并可以实现消息的显示,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: