我目前正在进行struts升级(从struts 1.x迁移到2.x)
我的项目有一个自定义标记处理程序类,用于格式化应用程序中的数字
TLD文件
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>f</shortname>
<uri>http://jakarta.apache.org/struts/tags-html</uri>
<tag>
<name>formatNumber</name>
<tagclass>com.taghandler.FormatNumberTag</tagclass>
<bodycontent>empty</bodycontent>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>property</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>scope</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>format</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
FormatNumberTag类
public class FormatNumberTag extends TagSupport
{
protected String name = null;
protected String property = null;
protected String scope = null;
protected String format = null;
//getters and setters of above member variables
public int doStartTag() throws JspException
{
// Look up the requested bean (if necessary)
Object bean = null;
if (RequestUtils.lookup(pageContext, name, scope) == null)
{
return (SKIP_BODY); // Nothing to output
}
// Look up the requested property value
Object value = RequestUtils.lookup(pageContext, name, property, scope);
if (value == null)
{
return (SKIP_BODY); // Nothing to output
}
String output = null;
if (format.equalsIgnoreCase(MyConstants.PRICE_FORMAT))
{
output = CustomConverter.priceFormat(value); //custom class which formats number
}
else if (format.equalsIgnoreCase(MyConstants.PERCENTAGE_FORMAT))
{
output = CustomConverter.positionFormat(value); //custom class which formats number
}
ResponseUtils.write(pageContext, output);
// Continue processing this page
return (SKIP_BODY);
}
}
JSP
<f:formatNumber name="AccountBean" property="floatingRate" format="percentage" />
这里,AccountBean是bean,floatingRate是属性
1)在标签处理程序类上面,(org.apache.struts.util.请求Utils)请求Utils.lookup
2)在JSP中,在自定义标记中传递3个值/属性(帐户Bean、浮动速率、百分比)。
>
如何传递bean、属性
在Struts2应用程序中,您可以轻松地将国际化支持与s: text
标记结合使用,以呈现格式化的文本。
通过将以下消息添加到与操作关联的国际化属性文件,或通过struts定义全局消息文件。风俗i18n。参考资料
:
format.price={0,number,#,###,##0.00}
format.price.with.currency={0,number,#,###,##0.00} {1}
format.percentage={0,number,#,##0.00}%
然后,为了呈现它们,JSP代码可能类似于以下内容:
<!-- Render listItemPrice using the format.price layout -->
<s:text name="format.price"><s:param value="accountBean.listItemPrice"/>
<!-- Render listItemPrice with currency code -->
<s:text name="format.price">
<s:param value="accountBean.listItemPrice"/>
<s:param value="accountBean.currencyCode"/>
</s:text>
<!-- Render percentage -->
<s:text name="format.percentage">
<s:param value="accountBean.floatingRate"/>
</s:text>
使现代化
如果需要自定义格式,还可以利用s:component
标记。
<s:component template="/components/numeric-format.ftl">
<s:param name="type" value="%{'price'}" />
<s:param name="value" value="%{accountBean.floatingRate}"/>
</s:component>
然后可以定义/components/numeric格式。ftl
freemarker模板,并添加所需的任何特定逻辑
<span class="<#if parameters.value < 0>negative</#if><#else>positive</#else>">
<@s.if test="${parameters.type?default('')} eq 'price'">
<@s.text name="format.price">
<@s.param value="${parameters.value}"/>
</@s.text/>
</@s.if>
<#-- add other if blocks for various types and formats -->
</span>
问题内容: 我有一个属性指令,其限制如下: 我需要传递两个属性;一个数字和一个函数/回调,使用对象在指令中访问它们。 如果指令是元素指令,那么我可以限制为: 但是,出于某种原因,我不再赘述,我需要将该指令作为属性指令。 如何将多个属性传递到属性指令中? 问题答案: 该指令可以访问在同一元素上定义的任何属性,即使该指令本身不是该元素也是如此。 模板: 指示: 如果attribute的值将被硬编码,则
问题内容: 这是我的问题: 当我用JavaScript编写此代码时 // 好: 但是,当我尝试在属性标签中动态设置该值时,没有任何执行。 // 不好: 有人可以帮我吗? 问题答案: Struts标签,例如JSTL,EL等,是在服务器端执行的。执行完所有这些步骤后,仅HTML的最终页面将呈现给客户端。只有这样,JavaScript才能在页面上运行。 您不能混合使用javascript和Struts标
问题内容: 这是我的问题: 当我用JavaScript编写此代码时 // 好: 但是,当我尝试在属性标签中动态设置该值时,没有任何执行。 // 不好: 有人可以帮我吗? 问题答案: Struts标签,例如JSTL,EL等,是在服务器端执行的。执行完所有这些步骤后,仅HTML的最终页面将呈现给客户端。只有这样,JavaScript才能在页面上运行。 您不能混合使用javascript和Struts标
如何将属性传递给gradle自定义任务?在ant中,它将如下所示: 在格拉德尔怎么做? 属性名称和版本是必需的,用户需要将它们传递给任务。
Amazon EMR是否允许将系统属性传递给自定义jar,例如hadoop jar-Dkey=value-myjob。jar?(