自定義Struts2標籤 ---- 流程回顧
場景:多個頁面中用到了同一個登入框/ 登入後的狀態框(顯示註冊會員的資訊)。整合成一個標籤能簡化JSP中的程式碼量。使之更清晰
1:web/WEB-INF 下配置自定tld檔案 描述檔案
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>2.2.3</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>
<uri>/barehead-tags</uri> -JSP中使用時需要靠uri引入此自定義標籤庫
<tag>
<name>loginstatusframe</name>
<tag-class>com.bareheadzzq.page.tags.LoginDivTag</tag-class>對應類全名
<body-content>empty</body-content>
<attribute>
<name>login</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>--
前臺類檔案 用來處理在JSP頁面中使用自定義便籤時傳入的引數
import org.apache.struts2.components.Component;
import org.apache.struts2.views.jsp.ComponentTagSupport;
public class LoginDivTag extends ComponentTagSupport {
private Boolean login;
public Boolean getLogin()
{
return login;
}
public void setLogin(Boolean login)
{
this.login = login;
}
@Override
public Component getBean(ValueStack arg0, HttpServletRequest arg1,
HttpServletResponse arg2) {
return new LoginDiv(arg0,arg1);
}
protected void populateParams() {
super.populateParams();
LoginDiv loginDiv = (LoginDiv) component;
loginDiv.setLogin(login);
}
LoginDiv。java: 後臺類檔案。
public class LoginDiv extends Component {
×××××××××××××
private Boolean login;
public Boolean getLogin()
{
return login;
}
public void setLogin(Boolean login)
{
this.login = login;
}
private HttpServletRequest request;
@Override
public boolean start(Writer writer) {
boolean result = super.start(writer);
try
{
**********
//標籤資料處理
if(login)//已經登入
{
********loginStr
}else
{
×××××××××××statusStr
}
//構造登入框
×××××××××loginStr
//構造狀態框
×××××××statusStr
writer.write(loginStr.toString() + statusStr.toString()); //構造好頁面結構 裡面的資料也能時構造好後。寫給瀏覽器
} catch (Exception e)
{
logger.error("登入框標籤出錯!", e);
}
return result;
}
public LoginDiv(ValueStack stack, HttpServletRequest request)
{
super(stack);
this.request = request;
}
注意的地方: 如果頁面中的結構經常變換那麼就不要在程式碼中吧頁面結構也寫進行。-- 否則將一旦變換維護量就比較大。
構造的標籤裡的頁面的樣式class=? 這個樣式名字可以先有前臺制定好了。在程式碼中就可以寫死,而不用在作為一個屬性