Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee 如何将请求参数输入查询条件?_Jakarta Ee_Jsf 2_Ejb_Cdi - Fatal编程技术网

Jakarta ee 如何将请求参数输入查询条件?

Jakarta ee 如何将请求参数输入查询条件?,jakarta-ee,jsf-2,ejb,cdi,Jakarta Ee,Jsf 2,Ejb,Cdi,我已经阅读了关于JSF2和Weld示波器的所有资料。我想我已经读了巴卢斯写的关于这个主题的几乎所有东西,但我仍然无法理解这一点。我不想让你们认为我不是一个人努力想得到这个 我有一个非常简单的应用程序与搜索页面和结果页面。真正的应用程序比这个测试应用程序大得多,大约有20个参数。有两个RequestScope bean,一个支持搜索,另一个支持结果。有一个EJB接收输入,创建查询并将匹配实体的列表返回给结果 我有一个问题和一个问题。问题是我试图从搜索结果中获取参数值的尝试不起作用。我经常看到这种模

我已经阅读了关于JSF2和Weld示波器的所有资料。我想我已经读了巴卢斯写的关于这个主题的几乎所有东西,但我仍然无法理解这一点。我不想让你们认为我不是一个人努力想得到这个

我有一个非常简单的应用程序与搜索页面和结果页面。真正的应用程序比这个测试应用程序大得多,大约有20个参数。有两个RequestScope bean,一个支持搜索,另一个支持结果。有一个EJB接收输入,创建查询并将匹配实体的列表返回给结果

我有一个问题和一个问题。问题是我试图从搜索结果中获取参数值的尝试不起作用。我经常看到这种模式被使用,但我试图让它发挥作用却失败了

问题是。。。。将参数从搜索页面获取到EJB的最佳方法是什么,这些参数将在EJB中用作查询的一部分。我应该是从EJB访问请求参数映射的abel吗?我试过了,但没有成功——不确定这是我正在做的事情,还是这根本不可能。这个EJB应该是有状态的还是无状态的

Search.xhtml

<html>

<h:head></h:head>

<h:form>

    <h:panelGrid columns="2">
        <h:outputText value="Hostname" />
        <h:inputText value="#{deviceSearch.hostname}" />
    </h:panelGrid>

    <h:commandButton action="#{deviceSearch.navigate('devices')}"
        value="Devices Page">
        <f:param name="hostname" value="#{deviceSearch.hostname}" />
    </h:commandButton>

    <h:button value="Reset" immediate="true" type="reset" />


</h:form>
</html
DeviceResult.java

@Named
@RequestScoped
public class DeviceResult {

    @Inject DeviceService deviceListService;


    String hostname;

    public void init(){
        deviceList = deviceListService.fetchDevices(hostname);
    }

    public String getHostname() {
        return hostname;
    }

    public void setHostname(String hostname) {
        this.hostname = hostname;
    }


    // Results
    List<Devices> deviceList = new ArrayList<Devices>();

    public List<Devices> getDeviceList() {
        deviceList = deviceListService.fetchDevices(hostname);
        return deviceList;
    }
}
DeviceService.java

@Stateful
public class DeviceService {

    @PersistenceContext
    EntityManager em;

    public DeviceService() {
    }

    String hostname;
    List<Devices> devicesList = new ArrayList<Devices>();

    @SuppressWarnings("unchecked")
    public List<Devices> fetchDevices(String hostname) {
        Query qry = em.createQuery("SELECT d FROM Devices d WHERE d.name=:name");
        qry.setParameter("name", hostname);
        devicesList = qry.getResultList();
        return devicesList;
    }
}

也许您应该使用会话范围的bean或会话范围的bean来保存搜索结果。此外,在搜索表单中不需要param标记。文本输入绑定到deviceSearch.hostName这一事实足以确保在支持bean中设置属性。当用户提交表单时,setHost setter将被自动调用。此外,您的导航方法非常奇怪,似乎不必要。导航应该通过返回bean操作的结果来处理,该结果引用Navigation.xml文件中的条目!如果你买了一本书,从一开始就花一天时间阅读,所有这些东西都会更有意义。如果你在互联网上乱七八糟地阅读随机信息,我向你保证,事情对你来说仍然会很混乱。导航方法在整个即将推出的应用程序中更有意义,因为在这个应用程序中,除了一个结果之外,还有更多的可能性@jahroy我相信你对这本书的看法是正确的,你也知道在互联网上蹦蹦跳跳的陷阱。我真正喜欢的是一门课——我在那里比在阅读中学到的好得多,而且学得也快得多,但我个人负担不起,我的雇主也不会赞助,因为java web app开发不是我团队的实际任务。我推荐。你可以在那里免费阅读。至少看看导航部分。。。谁知道呢,也许修复你的导航会修复你的其他一些问题。事实上,我昨天有了一个顿悟,突然一切都恢复了。同样,我之前也提出过类似的问题,这是CDI/JSF混淆,请参见上面的@Named。我还没有意识到CDI和JSF处理请求参数的机制是不同的。在我心目中,我把这一切都混为一谈了。不过我现在是异性恋了。谢谢你的参考书。有几种选择,所以你的建议很有帮助。
@Named
@RequestScoped
public class DeviceResult {

    @Inject DeviceService deviceListService;


    String hostname;

    public void init(){
        deviceList = deviceListService.fetchDevices(hostname);
    }

    public String getHostname() {
        return hostname;
    }

    public void setHostname(String hostname) {
        this.hostname = hostname;
    }


    // Results
    List<Devices> deviceList = new ArrayList<Devices>();

    public List<Devices> getDeviceList() {
        deviceList = deviceListService.fetchDevices(hostname);
        return deviceList;
    }
}
@Stateful
public class DeviceService {

    @PersistenceContext
    EntityManager em;

    public DeviceService() {
    }

    String hostname;
    List<Devices> devicesList = new ArrayList<Devices>();

    @SuppressWarnings("unchecked")
    public List<Devices> fetchDevices(String hostname) {
        Query qry = em.createQuery("SELECT d FROM Devices d WHERE d.name=:name");
        qry.setParameter("name", hostname);
        devicesList = qry.getResultList();
        return devicesList;
    }
}