0

OpenXava 中的标签在 i18n 文件中指定。但是,如果我需要根据某些逻辑(例如从操作)在运行时更改标签怎么办。

假设我有一个具有利润属性的实体,但如果属性值为负,我想将标签从“利润”更改为“损失”。就像在这个动作代码中一样:

public void execute() throws Exception {
    // ...
    BigDecimal profit = (BigDecimal) getView().getValue("profit");
    if (profit.compareTo(BigDecimal.ZERO) < 0) {
        // Here I want to change the label of profit from "Profit" to "Loss"
    }
}
4

1 回答 1

0

View 类有一个 setLabelId() 方法来更改属性的标签。虽然它从 i18n 标签文件中接收标签 id,但如果您发送的标签不是 i18n 文件上的键,标签 id 会按字面显示,也可以在 ' 之间发送标签,然后总是按字面显示. 也就是说,您可以在您的操作中使用它:

getView().setLabelId("myProperty", "This is my property");

然后 myProperty 的标签将是“这是我的财产”。虽然使用 i18n 文件中的 id 而不是标签本身是更好的做法,但您可以编写上面的代码:

getView().setLabelId("myProperty", "thisIsMyProperty");

在标签 i18n 文件中添加:

thisIsMyProperty=This is my property

所以,你可以这样写你的代码:

public void execute() throws Exception {
    // ...
    BigDecimal profit = (BigDecimal) getView().getValue("profit");
    if (profit.compareTo(BigDecimal.ZERO) < 0) {
        getView().setLabelId("profit", "loss");
    }
}
于 2021-03-26T20:09:31.980 回答