Java 如何在Struts2中使用子字符串?

Java 如何在Struts2中使用子字符串?,java,struts2,substring,Java,Struts2,Substring,如何使用Struts2标记库对字符串进行子串 这是我使用JSTL/EL的尝试: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> ... <s:property value="firstName" /> <c:set var="stri

如何使用Struts2标记库对字符串进行子串

这是我使用JSTL/EL的尝试:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
...
<s:property value="firstName" />
<c:set var="string" value="${firstName} "/>
<c:out value="${fn:substring(string,0,5)} "/>

然而,这不起作用。如何实现我的需求?

您可以使用JSP EL作为${action.property}引用操作属性


您可以使用JSPEL作为${action.property}引用操作属性


假设firstName是java.lang.String,则:

<s:property value="firstName.substring(0,5)" />

假设firstName是java.lang.String,则:

<s:property value="firstName.substring(0,5)" />

substring函数只作用于底层Java字符串对象,而不作用于我们用它生成的s:set变量。 例如:

假设我有一个Actionclass,它包含一个Java变量email。然后我可以访问JSP文件中的此变量,如下所示:

<s:set name="jspEmail" value="%{email}" />
<s:set name="namepart" value="%{email.substring(0,email.indexOf("@"))}" />
如果我现在想在@之前对所有内容进行子串,我必须在Java变量上执行此操作,而不是在JSP struts变量上执行此操作。 所以像这样:

<s:set name="jspEmail" value="%{email}" />
<s:set name="namepart" value="%{email.substring(0,email.indexOf("@"))}" />
然后像这样使用它:

<s:property value="%{namepart}"/>

substring函数只作用于底层Java字符串对象,而不作用于我们用它生成的s:set变量。 例如:

假设我有一个Actionclass,它包含一个Java变量email。然后我可以访问JSP文件中的此变量,如下所示:

<s:set name="jspEmail" value="%{email}" />
<s:set name="namepart" value="%{email.substring(0,email.indexOf("@"))}" />
如果我现在想在@之前对所有内容进行子串,我必须在Java变量上执行此操作,而不是在JSP struts变量上执行此操作。 所以像这样:

<s:set name="jspEmail" value="%{email}" />
<s:set name="namepart" value="%{email.substring(0,email.indexOf("@"))}" />
然后像这样使用它:

<s:property value="%{namepart}"/>

我不知道Struts2部分,因为我不使用它。尝试用value=somestring替换value=${firstName}。如果它有效,那么Struts2和EL不共享同一范围就是一个事实。您希望使用一个或另一个,但不能同时使用两个。可能重复:我建议您使用JQuery在JSP端处理代码。@kamaci:Re:我建议您使用JQuery在JSP端处理代码。哈哈,好笑话。提示:我不知道Struts2部分,因为我不使用它。尝试用value=somestring替换value=${firstName}。如果它有效,那么Struts2和EL不共享同一范围就是一个事实。您希望使用一个或另一个,但不能同时使用两个。可能重复:我建议您使用JQuery在JSP端处理代码。@kamaci:Re:我建议您使用JQuery在JSP端处理代码。哈哈,好笑话。提示:我认为大小写错误,但无法编辑。我认为正确的是substring.No-如果firstName的长度小于5,那么使用核心Java String.substring将失败。使用JSTL fn:子字符串不会失败。我认为大小写是错误的,但无法编辑。我认为正确的是substring.No-如果firstName的长度小于5,那么使用核心Java String.substring将失败。使用JSTL fn:substring不会失败。请注意,使用JSTL fn:substring时,无需检查字符串长度。如果太小,则不会产生StringIndexOutOfBoundsException-与core Java String.substring不同。请注意,使用JSTL fn:substring时,无需检查字符串长度。如果太小,则不会产生StringIndexOutOfBoundsException,这与核心Java String.substring不同。