在AEM中,可以使用OSGi配置来定义多字段多值属性。下面是一个示例解决方法:
MyConfig
的类:package com.example.myproject.config;
import org.osgi.service.metatype.annotations.AttributeDefinition;
import org.osgi.service.metatype.annotations.ObjectClassDefinition;
@ObjectClassDefinition(name = "My Configuration", description = "This configuration defines multiple fields and values")
public @interface MyConfig {
@AttributeDefinition(name = "Field 1", description = "First field")
String field1() default "";
@AttributeDefinition(name = "Field 2", description = "Second field")
String field2() default "";
@AttributeDefinition(name = "Field 3", description = "Third field")
String[] field3() default {};
// Add more fields as needed
}
MyConfigImpl
的类:package com.example.myproject.config;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Modified;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.metatype.annotations.Designate;
@Component(service = MyConfigService.class, immediate = true)
@Designate(ocd = MyConfig.class)
public class MyConfigImpl implements MyConfigService {
private String field1;
private String field2;
private String[] field3;
@Activate
@Modified
protected void activate(MyConfig config) {
field1 = config.field1();
field2 = config.field2();
field3 = config.field3();
}
@Override
public String getField1() {
return field1;
}
@Override
public String getField2() {
return field2;
}
@Override
public String[] getField3() {
return field3;
}
}
MyConfigService
的接口:package com.example.myproject.config;
public interface MyConfigService {
String getField1();
String getField2();
String[] getField3();
// Add more getter methods as needed
}
现在,你可以在其他组件中注入MyConfigService
接口,并使用它来访问多字段多值属性。例如,在一个Servlet中使用它:
package com.example.myproject.servlet;
import com.example.myproject.config.MyConfigService;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import java.io.IOException;
@Component(service = Servlet.class, property = {
"sling.servlet.methods=GET",
"sling.servlet.paths=/bin/myproject/myservlet"
})
public class MyServlet extends SlingAllMethodsServlet {
@Reference
private MyConfigService configService;
@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
String field1 = configService.getField1();
String field2 = configService.getField2();
String[] field3 = configService.getField3();
// Use the configuration values as needed
response.getWriter().write("Field 1: " + field1 + "\n");
response.getWriter().write("Field 2: " + field2 + "\n");
response.getWriter().write("Field 3: " + Arrays.toString(field3) + "\n");
}
}
以上示例代码演示了如何使用OSGi配置定义和访问多字段多值属性。你可以根据自己的需求,添加更多的字段和值。