【问题标题】:Create a re-usable Java function创建可重用的 Java 函数
【发布时间】:2013-09-17 12:31:53
【问题描述】:

我在 Java Tapestry 中有一个打印 3 个文本块的页面,我们称它们为 BlockOfTextOne、BlockOfTextTwo、BlockOfTextThree。对于每个文本块,如果内容超过 170 个字符,我想截断内容并添加“阅读更多”链接。

我正在使用 Java 方便的 BreakIterator 类返回文本块的第一部分,在最接近 170 个字符的句子边界处剪切,然后返回从该边界开始的文本块的第二部分。

我为 BlockOfTextOne 工作。我想要关于使我的文本截断函数可对每个 BlockOfTextN 重复使用的建议,这样我就不需要重复代码。我也会感谢其他关于代码改进的建议,到目前为止,我所得到的更多是实验的结果,而不是专业知识。

这是我目前所拥有的:

在 TML 文件中,我检查字符串是否超过允许的长度。如果是,运行 truncate 函数并打印 readmore 按钮。否则,只需打印字符串:

<t:if test="isQuestionTooLong()">
  ${getBeginningOfBlockOfTextOne()}
  <button type="button" class="readmore">Read More</button>
  <div>${getTheRestOfBlockOfTextOne()}</div>
    <p:else>
     ${case.blockoftextwholestring} 
    </p:else>
</t:if>

在 .java 文件中,我得到了文本块的第一位:

 public String getBeginningOfBlockOfTextOne() {   
    int summaryLength = blockoftextwholestring.length();
    BreakIterator bi = BreakIterator.getSentenceInstance();
    bi.setText(blockoftextwholestring);
    int first_after = bi.following(MAX_LENGTH_TEXT_QUESTION);
    String firstBit = blockoftextwholestring.substring(0, first_after);
    return (firstBit);
}

然后我得到了文本块的第二位,复制了很多代码,基本上只是改变了传递给子字符串的参数:

public String getTheRestOfBlockOfTextOne(){
    BreakIterator bi = BreakIterator.getSentenceInstance();
    bi.setText(blockoftextwholestring);
    int first_after = bi.following(MAX_LENGTH_TEXT_QUESTION);
    String secondBit = blockoftextwholestring.substring(first_after, summaryLength);
    return (secondBit);
}

我知道我可以将这些分解为可重复使用的组件,但不知道最好的方法。我还希望能够为 BlockOfTextTwo 和 BlockOfTextThree 重新使用这两者。有什么建议吗?

【问题讨论】:

  • 所以只是将内容字符串传递给函数,还是我误解了你?类似getBeginningOfBlock(String wholestring) {...}

标签: java string function tapestry


【解决方案1】:

为每个要显示的字符串设置一个@Property,并在@SetupRender 方法中对其进行初始化。 @SetupRender 方法可以根据需要调用私有帮助方法。

或者,只为要在页面上显示的每个字符串设置 getter,并委托给私有帮助方法。

顺便说一句:${getFoo()} 最好写成${foo}

【讨论】:

    【解决方案2】:

    这看起来应该作为一个组件来实现。当您有冗余代码时,它应该是服务(在页面和组件之间共享)或组件(如果它是面向 UI 的)。

    Tapestry 中的组件非常便宜和简单,因此您应该始终考虑创建新组件。正如您可能将一个大型复杂方法重构为几个小方法(即使新方法仅在一个地方调用),您应该考虑将一个非常大的页面分解为多个组件。

    【讨论】:

      猜你喜欢
      • 2021-06-26
      • 2019-03-11
      • 1970-01-01
      • 2022-01-19
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      相关资源
      最近更新 更多