下面列出了怎么用javax.servlet.jsp.tagext.JspFragment的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
public void doTag() throws JspException, IOException {
// 将 标签体内容读入该 writer
StringWriter writer = new StringWriter();
// 标签体 为 JspFragment 的形式
JspFragment jspFragment = this.getJspBody();
// 通过 invoke 输出到指定的 writer 中。
// 如果参数为 null,将输出到默认的 writer 中,即 getJspContext().getOut() 输出到HTML中
jspFragment.invoke(writer);
String content = writer.getBuffer().toString();
this.getJspContext().getOut().print(content.toUpperCase());
}
@Override
public void doTag() throws JspException {
JspWriter out = getJspContext().getOut();
String uid;
if (this.sid != null) {
uid = Core.newIdentity(this.sid);
} else {
uid = Core.newIdentity();
}
try {
out.print(uid);
JspFragment f = getJspBody();
if (f != null) f.invoke(out);
} catch (java.io.IOException ex) {
throw new JspException("Error in NuidTag", ex);
}
}
/**
* パンクズリストを表示します。
* このメソッドはJSP-BODYを評価せずに、
* 既存のHTMLテンプレート、あるいはクラスコンフィグオーバライドされたHTMLテンプレートを利用します。
* @throws JspException JSP処理中にエラーが発生した場合
* @throws IOException 入出力エラーの場合
*/
protected void render() throws JspException, IOException {
render(new JspFragment() {
@Override public JspContext getJspContext() {
return PankuzuTag.this.getJspContext();
}
@Override public void invoke(Writer out) throws JspException, IOException {
JspContext context = getJspContext();
ViewId vid = (ViewId) context.getAttribute(var);
String encodedUrl = encodeURL(vid.getUrl());
String item = Strings.substitute(DEFAULT_TEMPLATE, Maps
.hash("url", encodedUrl)
.map("label", Strings.escapeHTML(vid.getLabel()))
.map("query", trimQueryMarkerIfGetRequestParameterExists(encodedUrl, vid.getQuery())));
context.getOut().print(item);
}
});
}
private String invokeFragmentIfNeeded(
JspFragment fragment,
String defaultValue,
int currentIndex) throws JspException {
PageContext p = pageContext;
StringWriter w = new StringWriter();
if (fragment != null) {
if (currentIndex > 0) p.setAttribute(var, currentIndex);
try {
fragment.invoke(w);
} catch (IOException e) {throw new JspException(e);}
if (currentIndex > 0) p.removeAttribute(var);
} else {
w.append(Strings.substitute(
defaultValue,
Maps.hash(var, String.valueOf(currentIndex))));
}
return w.toString();
}
/**
* {@inheritDoc}
*/
@Override
public void doTag() throws JspException, IOException {
super.doTag();
JspFragment template = getJspBody();
if (template != null) {
render(template);
} else {
render();
}
}
public static String getBodyResult(JspFragment jspBody) throws IOException, JspException {
if (jspBody == null) {
return "";
}
StringWriter writer = new StringWriter();
jspBody.invoke(writer);
return writer.toString();
}
public void setFragment1( JspFragment fragment1 ) {
this.fragment1 = fragment1;
}
public void setFragment2( JspFragment fragment2 ) {
this.fragment2 = fragment2;
}
public void setFragment3( JspFragment fragment3 ) {
this.fragment3 = fragment3;
}
public void setFragment1( JspFragment fragment1 ) {
this.fragment1 = fragment1;
}
public void setFragment2( JspFragment fragment2 ) {
this.fragment2 = fragment2;
}
public void setFragment3( JspFragment fragment3 ) {
this.fragment3 = fragment3;
}
public void setBody1(JspFragment body1) {
this.body1 = body1;
}
public void setBody2(JspFragment body2) {
this.body2 = body2;
}
public void setFragment1( JspFragment fragment1 ) {
this.fragment1 = fragment1;
}
public void setFragment2( JspFragment fragment2 ) {
this.fragment2 = fragment2;
}
public void setFragment3( JspFragment fragment3 ) {
this.fragment3 = fragment3;
}
public void setFragment1( JspFragment fragment1 ) {
this.fragment1 = fragment1;
}
public void setFragment2( JspFragment fragment2 ) {
this.fragment2 = fragment2;
}
public void setFragment3( JspFragment fragment3 ) {
this.fragment3 = fragment3;
}
public void setFragment1( JspFragment fragment1 ) {
this.fragment1 = fragment1;
}
public void setFragment2( JspFragment fragment2 ) {
this.fragment2 = fragment2;
}
public void setFragment3( JspFragment fragment3 ) {
this.fragment3 = fragment3;
}
@Override
public void doTag () throws JspException, IOException
{
final JspFragment body = (JspFragment)getJspContext ().getAttribute ( DefineTag.ATTR_PREFIX + this.name );
if ( body == null )
{
throw new JspException ( String.format ( "Unable to find macro '%s'", this.name ) );
}
final JspContext ctx = body.getJspContext ();
// set attributes to body context
final Map<String, Object> oldEntries = new HashMap<> ( this.data.size () );
for ( final Map.Entry<String, Object> entry : this.data.entrySet () )
{
oldEntries.put ( entry.getKey (), ctx.getAttribute ( entry.getKey (), PageContext.PAGE_SCOPE ) );
ctx.setAttribute ( entry.getKey (), entry.getValue (), PageContext.PAGE_SCOPE );
}
// invoke
body.invoke ( getJspContext ().getOut () );
// set old values, so we don't clutter up the context for the next caller
for ( final String key : this.data.keySet () )
{
final Object val = oldEntries.get ( key );
if ( val == null )
{
ctx.removeAttribute ( key, PageContext.PAGE_SCOPE );
}
else
{
ctx.setAttribute ( key, val, PageContext.PAGE_SCOPE );
}
}
}
@Override
public void setJspBody ( final JspFragment jspBody )
{
super.setJspBody ( jspBody );
getJspContext ().setAttribute ( ATTR_PREFIX + this.name, jspBody, PageContext.PAGE_SCOPE );
}
private String invokeFragmentIfNeeded(
JspFragment fragment,
String defaultValue) throws JspException {
return invokeFragmentIfNeeded(fragment, defaultValue, Integer.MIN_VALUE);
}
@Test
public void jspFragmentが設定される() throws Exception {
PartialList<String> display = new PartialList<String>();
for (int i = 0; i < 110; i++) {
display.add(Integer.toString(i));
}
display.setElementCount(110);
display.setPartCount(11);
display.setElementCountPerPart(10);
display.setPartIndex(7);
PageNavigationTag tag = new PageNavigationTag();
tag.setPageContext(context);
tag.setPartial(display);
tag.setAction("/list");
JspFragment fragment = new JspFragment() {
@Override
public JspContext getJspContext() {
return context;
}
@Override
public void invoke(Writer out) throws JspException, IOException {
out.write("----");
}
};
tag.setOmission(fragment);
tag.doStartTag();
tag.doEndTag();
String actual = resp.getContentAsString();
actual = actual.replaceAll("<span class=\"jfw_paginate_navi_head\">", "");
actual = actual.replaceAll("<span class=\"jfw_paginate_navi_previous\">", "");
actual = actual.replaceAll("<span class=\"jfw_paginate_navi_page\">", "");
actual = actual.replaceAll("<span class=\"jfw_paginate_navi_page_selected\">", "");
actual = actual.replaceAll("<span class=\"jfw_paginate_navi_next\">", "");
actual = actual.replaceAll("<span class=\"jfw_paginate_navi_tail\">", "");
actual = actual.replaceAll("<span class=\"jfw_paginate_navi_omission\">", "");
actual = actual.replaceAll("</span>", "\n");
String[] split = actual.split("\n");
assertThat(split.length, is(15));
assertThat(Arrays.asList(split), hasItem("<a href=\"/list?pageNumber=1\"><<</a>"));
assertThat(Arrays.asList(split), hasItem("<a href=\"/list?pageNumber=6\"><</a>"));
assertThat(Arrays.asList(split), hasItem("<a href=\"/list?pageNumber=2\">2</a>"));
assertThat(Arrays.asList(split), hasItem("<a href=\"/list?pageNumber=11\">11</a>"));
assertThat(Arrays.asList(split), hasItem("7"));
assertThat(Arrays.asList(split), hasItem("----"));
assertThat(Arrays.asList(split), hasItem("<a href=\"/list?pageNumber=8\">></a>"));
assertThat(Arrays.asList(split), hasItem("<a href=\"/list?pageNumber=11\">>></a>"));
}
public void setJspBody(JspFragment arg0) {
}
public void setJspBody(JspFragment arg0) {
}
/**
* Gets the importLineOverride attribute.
* @return Returns the importLineOverride.
*/
public JspFragment getImportLineOverride() {
return importLineOverride;
}