有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在OpenXava中从操作(在运行时以编程方式)更改属性的标签?

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"
    }
}

共 (1) 个答案

  1. # 1 楼答案

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

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

    然后myProperty的标签将是“This is my property”。虽然使用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");
        }
    }