【问题标题】:Test length of string with struts2 tag用struts2标签测试字符串的长度
【发布时间】:2015-12-14 11:12:23
【问题描述】:

我有一个属性,它是 jsp 文件中的字符串,我想显示它。如果属性的长度超过 30 个字符,我只想显示前 30 个字符。我使用了以下代码:

<s:if test="%{title.length > 25}">
<s:property value="title.substring(0,25)" />
</s:if>
<s:else>
<s:property value="title" />
</s:else>

但是,它始终显示完整长度的标题。我猜if条件是错误的。如何解决?

【问题讨论】:

    标签: java jsp struts2


    【解决方案1】:

    您可以通过多种方式做到这一点,但这里有两种方式

    来自 Java

    您可以像这样在您的操作类中创建一个名为 getTrimmedTitle 的函数:

    public String getTrimmedTitle(){
        if (testing.length()>25)
            return testing.substring(0,25);
        else return testing;
    }
    

    那么在你的jsp中只有这个:

    <s:property value="trimmedTitle" />
    

    来自 JQuery

    您可以在要编辑的字段中添加一个 id,例如“title”,然后编写一个简单的函数,如下所示:

    <script type="text/javascript">
        $(document).ready(function(){
            $("#title").val($("#title").val().substr(1,25));
        });
    </script>
    

    每次加载页面时都会运行。

    【讨论】:

    • 谢谢,这个解决方案对我有用,但我想我们不能用 struts2 标签做到这一点?
    • 我不是 100% 确定,但我认为没有这样的选择。没有可用于限制您使用的 s:property 标记长度的属性。如果您使用像 s:textfield 这样的另一个标签并设置 maxLength 也无济于事,因为它限制了大于 maxLength 值的进一步输入,它不会修剪您的字符串。因此,如上所示控制输出可能更好,我更喜欢第一个选项。
    • @nkal 有这样的方法,看我的回答。
    【解决方案2】:

    从 Struts2 标记执行此操作:

    <s:if test="%{title.length() > 25}">
      <s:property value="title.substring(0, 25)"/>
    </s:if>
    <s:else>
      <s:property value="title"/>  
    </s:else>
    

    <s:property value="%{title.length() > 25 ? title.substring(0,25) + '...' : title}"/>
    

    【讨论】:

    • 不错的答案:),但现在我更喜欢使用后端代码 (java) 的解决方案,因为它可以让我更好地自定义标题,例如添加“...”
    • @lenhhoxung 如果你真的想要,也可以通过属性标签来做到这一点。这只是口味问题。
    猜你喜欢
    • 2015-10-10
    • 1970-01-01
    • 2015-02-24
    • 2016-03-27
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多